【问题标题】:WebClient UploadData does not throw on 403WebClient UploadData 不会抛出 403
【发布时间】:2018-04-11 11:04:16
【问题描述】:

我正在尝试使用以下代码调用我的 .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();

调用到达控制器,但是使用 Web 客户端对得到 403 非常满意,并且不会像在 BadRequest 上那样抛出异常。

这是为什么呢?

【问题讨论】:

  • 有什么理由使用已弃用的WebClient 而不是首选的HttpClient
  • 习惯,我猜。不知道有一个首选的新的:)
  • HttpClient 有一个IsSuccessStatusCode 属性,对于任何非2XX 状态返回false。 EnsureSuccessStatusCode 会根据IsSuccessStatusCode 抛出异常
  • 好吧,我来试一试。感谢您的提醒!

标签: c# asp.net-core


【解决方案1】:

感谢this 的回答,我才明白这一点:

当您想要从 API 响应 HTTP 403 状态代码并且 不希望 ASP.NET Core 身份验证逻辑执行任何 重定向或其他操作,使用:

这样就可以了:

return StatusCode((int)HttpStatusCode.Forbidden);

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2015-10-21
    • 2011-03-17
    • 1970-01-01
    • 2020-09-02
    • 2013-07-30
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多