我正试图从我得到Cross-Origin Request Blocking: The "Same Origin" policy does not allow access to the remote resource located at http://localhost:8888/api/users/17. Reason: Missing method in the "Access-Control-Allow-Methods" header
的角度服务中调用用ASP.NET实现的PUT Web api
我能够从角度调用GET和POST方法而没有问题
源代码:
edit(user : User) : Observable<object> {
his.httpClient.put('http://localhost:8888/api/users/' + user.userId, user);
}
这是PUT Web API:
[HttpPut("{id}")]
public async Task<ActionResult> Put(int id, [FromBody] UserViewModel model)
{
try
{
var user = _mapper.Map<UserViewModel, User>(model);
var status = await _repository.UpdateUserAsync(user);
if (!status)
{
return BadRequest("failed to edit user");
}
return Ok(_mapper.Map<User, UserViewModel>(user));
}
catch (Exception exp)
{
_loger.LogError(exp.Message);
return BadRequest("failed to edit user");
}
}
并且我还在启动类的服务中添加了Cors,如下所示:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
答案 0 :(得分:1)
您忘记将策略添加到每个请求中:
public void Configure(IApplicationBuilder app)
{
app.UseCors("CorsPolicy");
// ...
}
如果您只想向所需的控制器和操作添加策略,则无需编写上述代码,而应将此属性应用于操作或控制器:
[EnableCors("CorsPolicy")]