我有一个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方法,但仍然收到错误。
答案 0 :(得分:1)
CORS意味着您必须在应用程序服务器上为Access-Control-Allow-Origin
配置值为*
的所有内容。
由于Angular正在发出转机前请求,我强烈建议您将OPTIONS
添加到Access-Control-Allow-Methods
配置中。
这高度依赖于您正在使用的服务器,但您没有说明您为应用程序提供服务的方式。 ;)