Вызов PUT web api: проблема блокировки запросов из разных источников - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь вызвать веб-API PUT, реализованный в ASP.NET, из угловой службы, которую я получил 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

Я смог без проблем вызвать метод GET и POST из anglar

исходный код:

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 Ответ

1 голос
/ 14 октября 2019

Вы забыли добавить свою политику к каждому запросу:

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

    // ...
}

Если вы хотите добавить политику только к желаемым контроллерам и действиям, вам не нужно писать приведенный выше код, однакоПримените этот атрибут действий или контроллеров:

[EnableCors("CorsPolicy")]
...