当asp.net 5 web api中出现代码错误时,返回500内部服务器错误
本文关键字:错误 返回 服务器 内部 代码 net asp web api | 更新日期: 2023-09-27 18:28:22
我的大多数函数都涉及检查是否存在某种东西。如果没有,我将返回HttpNotFound()。它们还包括检查参数是否正确。如果不是,我返回HttpBadRequest()。如果一切正常,我通常会返回OK(dataGoesHere)。
然而,当使用Try-Catch块并抛出错误时,我应该怎么做。在Catch中,我只想简单地返回一个服务器错误。我看到一些API实际上也返回了自定义消息。
在ASP.NET 5中,事情的处理方式似乎大不相同。我不能像webapi 2中那样返回BadRequest()、Conflict()等。
这是我的团队在公共应用程序中使用的,修改后返回InternalServerError,其中所有未批准的请求都由该控制器处理:
public class ErrorController : ApiController
{
[HttpGet, HttpPost, HttpPut, HttpDelete, HttpHead, HttpOptions, AcceptVerbs("PATCH")]
public HttpResponseMessage HandleErrors()
{
HttpResponseMessage message = new HttpResponseMessage();
message.Content = new StringContent("<html><body><div>This is a custom message that will be displayed to the user in HTML format</div></body></html>");
message.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/html");
message.StatusCode = HttpStatusCode.InternalServerError;
return message;
}
}
除此之外,我们还使用了一个自定义的DefaultHttpControllerSelector和一个自定义ApiControllerActionSelector其中请求未知控制器和操作的请求由ErrorController检索。
编辑:添加另一个示例,假设要调用的Action(函数)返回IHttpActionResult
,并且您只想返回关于发生了什么的信息,这就是返回一般错误消息的方法:
return InternalServerError(ex);
另一个示例,这比上一个稍微复杂一点,但为您提供了以所需格式发送所需详细信息的方法:
public class SomethingFailedResult : IHttpActionResult
{
private HttpControllerContext _Context { get; set; }
private string _Message { get; set; }
public SomethingFailedResult(HttpControllerContext context, string message)
{
_Context = context;
_Message = message;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(_Context.Request.CreateResponse(HttpStatusCode.InternalServerError,
_Message, "someMediaType"));
}
}
然后,您将在控制器中创建一个辅助方法,如下所示:
private SomethingFailedResult SomethingFailed(string contents, HttpControllerContext context)
{
return new ExpectionFailedResult(contents, context);
}
当发生意外错误时,您应该记录异常并向用户发送通用消息。您可以为错误消息附加一个唯一的id,管理员或开发人员稍后可以在数据库中找到该id。
如果使用WebAPI 2.0
使用IHttpActionResult并返回InternalServerError,如下所示
public IHttpActionResult Get()
{
return InternalServerError();
}
对于WebAPI 1.0,使用HttpResponse消息如下:-
return Request.CreateResponse(HttpStatusCode.InternalServerError);