服务无法到达 post 函数

Service can't reach post function

嘿(第一次 post 来这里所以我可能会违反一些规则,如果我违反了请告诉我),

我正在尝试创建一个 Rest API,但我遇到了一些问题。 事实上,post 函数不会在 C# API 上触发,我不知道为什么与 getAll() 函数一起使用的 GET 函数 运行 很好。

Angular 服务:

public GetAll = (): Observable<Expertise[]> => {
        return this.http.get(this.actionUrl, '').map((response: Response) => <Expertise[]>response.json());
}

public Add = (thingToAdd: Expertise): Observable<Expertise> => {
    thingToAdd.Id = 1;
    let toAdd = JSON.stringify(thingToAdd);
    console.log(toAdd);
    console.log(this.actionUrl);
    return this.http.post(this.actionUrl, toAdd, { headers: this.headers 
}).map((response: Response) => response.json());
}

C#API:

// GET api/values
    [HttpGet]
    public async Task<IEnumerable<Expertise>> Get()
    {
        try
        {
            System.Console.WriteLine("Test get all");
            //var result = await cvService.Get("toto@azeo.com");
            return new List<Expertise>();
        }
        catch (System.Exception ex)
        {
            logger.LogError(ex.Message, ex);
            throw;
        }
    }
// POST api/values
    [HttpPost]
    public Expertise Post([FromBody]Expertise expertise)
    {
        try
        {
            System.Console.WriteLine("Test post");
            context.Expertises.Add(expertise);
            context.SaveChanges();

        logger.LogInformation("New expertise added !");
        return expertise;
        }
        catch (System.Exception ex)
        {
            logger.LogError(ex.Message, ex);
            throw;
        }
    }

专业知识(EF 模型):

public class Expertise
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<ExpCV> CVs { get; set; }
}

如果有人对 "link" 服务有想法,请告诉我 API,我已经坚持了很长时间。

提前致谢

由于您的服务 returns 和 observable 实际的 GETPOST 请求不会发生,直到您订阅该可观察对象。

看看我设置的这个插件:

plunker: https://plnkr.co/edit/r6aBaB3BjJzdIS4myAd8?p=preview

代码:

@Component({
    selector: 'app',
    template: `
        <button (click)="searchNoSub()">searchNoSub</button>
        <button (click)="search()">search</button>
    `
})

export class App {

    constructor(private searchService:SearchService) {
    }

    search(){
        this.searchService.search().subscribe(console.log,console.log)
    }
    searchNoSub(){ this.searchService.search(); }
}

搜索服务:

@Injectable()
export class SearchService {

  constructor(private http: Http) {}

  search(term: string) {
    // get artists named john from spotify API
    return this.http.get('https://api.spotify.com/v1/search?q=john&type=artist')
      .map((response) => response.json());
  }
}

现在打开您的开发工具和 chrome 中的 network 选项卡以查看新请求:

单击 searchNoSub 时,您会发现网络选项卡中未注册任何请求。 单击 search 按钮时,您会看到一个请求,因为我们已订阅。

简而言之,您需要订阅可观察到的请求。