【发布时间】:2016-10-27 03:09:01
【问题描述】:
我有一个 ASP.NET Core 1.0 Web API 应用程序,并试图弄清楚如果我的控制器调用错误的函数,如何将异常消息传递给客户端。
我尝试了很多东西,但都没有实现IActionResult。
我不明白为什么这不是人们需要的常见事物。如果真的没有解决办法,谁能告诉我为什么?
我确实看到了一些使用 HttpResponseException(HttpResponseMessage) 的文档,但为了使用它,我必须安装兼容 shim。在 Core 1.0 中是否有一种新的方式来处理这些事情?
这是我一直在尝试使用 shim 的东西,但它不起作用:
// GET: api/customers/{id}
[HttpGet("{id}", Name = "GetCustomer")]
public IActionResult GetById(int id)
{
Customer c = _customersService.GetCustomerById(id);
if (c == null)
{
var response = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent("Customer doesn't exist", System.Text.Encoding.UTF8, "text/plain"),
StatusCode = HttpStatusCode.NotFound
};
throw new HttpResponseException(response);
//return NotFound();
}
return new ObjectResult(c);
}
当HttpResponseException 被抛出时,我查看客户端并在内容中找不到我正在发送任何内容的消息。
【问题讨论】:
-
在 ASP.Net 中,我们通常会记录错误,而不是向用户显示,而是向用户显示发生错误的 JavaScript 警报。
-
@AshrafAbusada 真的是这样吗?您如何在 JavaScript 中为用户提供详细的警报。假设我的 Web API 的业务逻辑非常复杂,它可能会引发几个不同的异常,例如:“客户未正确设置”和“产品无效”,当引发此异常时,确实无法传递它在响应的标头或内容中发送给客户端?
-
@BlakeRivell 我们将错误包装到自己的自定义错误代码中,或者如果需要更详细的消息,则将其包装到自定义错误 DTO 对象中,并将其发送给客户端(同时更改响应状态代码以显示 HTTP代码错误,如 500)。然后客户端分析,HTTP 状态代码不是 200 OK,并根据自定义错误代码显示预定义的警报消息(+ 来自自定义错误 DTO 的数据)
-
您可以告诉您的客户您喜欢什么,状态码只是指示您的客户解释响应的方式。另外,它们不是自定义错误代码,它们称为 HTTP 状态代码。
-
HTTP 状态码是一个标准,并且围绕它们有很好的书面文档。任何值得他们重视的客户端开发人员都应该了解其中的大多数。但是,您发送给客户端的响应将有一个描述结果的对象 - 因此知道如何处理它应该是微不足道的。
标签: c# asp.net asp.net-web-api asp.net-core asp.net-core-1.0