【问题标题】:Web API always returns internal server error instead of error which I have thrownWeb API 总是返回内部服务器错误而不是我抛出的错误
【发布时间】:2017-03-13 18:03:58
【问题描述】:

我正在使用 HttpClient 调用此 Web API

using (var client = new HttpClient(new HttpClientHandler() { Credentials = _credentials }))
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                    
                return await client.PostAsJsonAsync(controlActionPath, entityObject);
            }

Web API 控制器我抛出以下错误:

throw new DuplicateNameException("User already exists.");

但是网络应用总是收到内部服务器错误而不是DuplicateNameException

如果有人提出从 Web API 将确切异常返回到 Web 应用程序的最佳方法,那将会很有帮助。

【问题讨论】:

  • 您在控制器中抛出的异常必须被转换为 HTTP 消息才能返回给您的客户端。默认情况下,Web API 正在处理异常并将其包装在 HTTP 状态代码 500(内部服务器错误)中,然后可能会执行一些操作,例如在响应正文中为您的异常编写堆栈跟踪。我不确定是否要在响应中返回确切的异常而不执行诸如序列化异常、返回它然后在客户端反序列化之类的操作。
  • 能发一下Web API Action Method的代码吗?

标签: c# asp.net asp.net-web-api


【解决方案1】:

因为您正在引发异常,所以它会自动成为内部服务器错误,因为它仍在您的内部服务器端代码中。您可以像在this answer 中一样创建异常处理程序,也可以抛出特定的HttpResponseException 类型,如Web API documentation on exception handling 中所述:

var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
  ReasonPhrase = "User already exists."
};

throw new HttpResponseException(response);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多