使用角度和aspnet核心获取CORS错误

时间:2018-05-15 15:40:52

标签: angular asp.net-core cors asp.net-core-webapi

我有一个ASP.NET Core webapi,我试图用Angular6应用程序发布它。 在GET请求上它工作正常,但是当我尝试发帖时,我总是会收到此错误:

  

请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许来源“http://localhost:4200”访问

我尝试了什么。 Startup.cs:

services.AddMvc();

services.AddCors(options => options.AddPolicy("AllowCors",
            builder =>
            {
                builder
                    .AllowAnyOrigin()
                    .WithMethods("GET", "PUT", "POST", "DELETE", "OPTIONS")
                    .AllowAnyHeader();
            }));

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseCors("AllowCors");
        app.UseMvc();
    }

在我的控制器中:

[Route("api/[controller]")]
[EnableCors("AllowCors")]
public class SearchController : Controller {
    //code

   //Here I get the error
   [HttpPost("{term}")]
   public async Task SaveSearch([FromBody]dynamic request, string term)
   {
        _searchRepository.SaveSearch(term, request);
   }
}

On Angular app:

saveSearch(term: string, res:any) {
  this.http.post(`${this.serviceEndpoint}${term}`, {
    term: term, origin: res.countryCode, request: res
  }).subscribe();
});

编辑:

我也放了OPTIONS方法,但仍然收到错误。

1 个答案:

答案 0 :(得分:1)

CORS意味着您必须在应用程序服务器上为Access-Control-Allow-Origin配置值为*的所有内容。

由于Angular正在发出转机前请求,我强烈建议您将OPTIONS添加到Access-Control-Allow-Methods配置中。

这高度依赖于您正在使用的服务器,但您没有说明您为应用程序提供服务的方式。 ;)