我正在尝试从我的应用程序返回适当的Http代码和响应,但我正在努力。似乎有两种方法可以返回特定的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我想要的消息?
答案 0 :(得分:5)
两种可能的解决方案;
<强>第一即可。 Make sure your IIS is configured to let errors pass through
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
</configuration>
<强>第二即可。我不完全确定,但ASP.NET Web API may require you to develop a custom ActionFilter to properly translate Exceptions to result types。这是我个人在Web API中进行错误处理的方式:
答案 1 :(得分:1)
检查HttpConfiguration上的IncludeErrorDetailPolicy设置。默认情况下,策略是在本地访问Web API时显示错误详细信息。