投掷HttpResponseException在的WebAPI动作方法返回空200响应(Throwi

2019-09-22 03:03发布

我想从我的应用程序返回相应的HTTP代码和反应,但我在努力。 看来,有2种方式返回特定的HTTP响应。

我想对付它的方法是抛出一个HttpResponseException

public Information Get(int apiKey)
{
    if (!_users.Authenticate(apiKey))
    {
        var response = new HttpResponseMessage();
        response.StatusCode = (HttpStatusCode)401;
        response.ReasonPhrase = "ApiKey invalid";

        throw new HttpResponseException(response);
    }

    return _info.Get();
}

但是,我这样做,当我看到的响应只是一个空200响应!

它还看来你也可以改变你的操作方法的签名,以返回HttpResponseMessage是这样的:

public HttpResponseMessage Get()
{
    if (!_users.Authenticate(apiKey))
    {
        return Request.CreateResponse((HttpStatusCode) 401, "ApiKey invalid");
    }

    return Request.CreateResponse((HttpStatusCode) 200, _info.Get());
}

我真的不想这样做,如果我能帮助它,我宁愿有我的返回类型,因为我试图检索,而不是每一次它包裹在一个对象HttpResponseMessage

是否有一个原因,第一种方法返回一个空的200,而不是401,我希望它的消息?

Answer 1:

两种可能的解决方案;

首先 。 确保你的IIS配置为允许误差通过

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

。 我不能完全肯定,但ASP.NET的Web API 可能需要开发自定义ActionFilter正确翻译异常导致类型 。 这是我亲手做的错误的Web API处理方式:

  1. 允许任何类型的异常的在网页API被抛出,就像你在任何其他.NET应用程序做
  2. 编写捕获异常并将其转换为相应格式的自定义ActionFilter。 举例来说,我在序列化的自定义JSON格式的所有异常。 在客户端,我有一些自定义的AJAX挂羊头卖狗肉,可以基于该格式处理错误(如验证例外)。


Answer 2:

检查IncludeErrorDetailPolicy设置上HttpConfiguration。 默认情况下,该政策是为了显示错误信息,而在本地访问的Web API。



文章来源: Throwing HttpResponseException in WebAPI action method returning empty 200 response