Webclient uploaddata не кидает на 403

Я пытаюсь вызвать свой .NET Core API с помощью следующего кода:

using (var webClient = new WebClient())
{
    try
    {
        webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");

        string json = JsonConvert.SerializeObject(updateLiveMapRequest);
        byte[] data = Encoding.UTF8.GetBytes(json);
        await webClient.UploadDataTaskAsync("http://localhost:1778/api/upload/data", data);
    }
    catch (WebException ex)
    {
        Logger.Debug(ex);
        throw;
    }
}

На моем сервере я в целях тестирования просто возвращаю Forbid():

return Forbid();

Вызов достигает контроллера, однако веб-клиент-потребитель полностью доволен получением в результате ошибки 403 и не генерирует исключение, как в случае с BadRequest.

Это почему?

Есть ли причина использовать устаревший WebClient вместо предпочтительного HttpClient?

Camilo Terevinto 11.04.2018 13:08

Я полагаю, это привычка. Не знал, что есть предпочтительный новый :)

SeToY 11.04.2018 13:10
HttpClient имеет свойство IsSuccessStatusCode, которое возвращает false для любого статуса, отличного от 2XX. EnsureSuccessStatusCode выдаст исключение на основе IsSuccessStatusCode
Camilo Terevinto 11.04.2018 13:11

Хорошо, я попробую. Спасибо за внимание!

SeToY 11.04.2018 13:13
3
4
144
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я только что понял это благодаря ответу это:

When you want to respond with a HTTP 403 status code from an API and do not want the ASP.NET Core authentication logic to perform any redirect or other action, use:

Это поможет:

return StatusCode((int)HttpStatusCode.Forbidden);

Другие вопросы по теме