调用PUT Web API:跨域请求阻止问题

时间:2019-10-14 10:15:57

标签: angular asp.net-core asp.net-web-api cors

我正试图从我得到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());
        });

1 个答案:

答案 0 :(得分:1)

您忘记将策略添加到每个请求中:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("CorsPolicy");

    // ...
}

如果您只想向所需的控制器和操作添加策略,则无需编写上述代码,而应将此属性应用于操作或控制器:

[EnableCors("CorsPolicy")]