gpt4 book ai didi

c# - 当 asp.net 5 web api 中的代码错误时返回 500 内部服务器错误

转载 作者:行者123 更新时间:2023-11-30 16:04:47 26 4
gpt4 key购买 nike

我的大部分功能都涉及检查是否存在某些内容。如果没有,我将返回 HttpNotFound()。它们还包括检查参数是否正确。如果不是,我将返回 HttpBadRequest()。如果一切正常,我通常会返回 OK(dataGoesHere)。

但是,当使用 Try Catch block 并抛出错误时我应该做什么。在 Catch 中,我想简单地返回一个服务器错误。我已经看到一些 API 实际上也返回自定义消息。

在 ASP.NET 5 中,事情似乎有很大不同。我不能像在 web api 2 中那样返回 BadRequest()、Conflict() 等。

最佳答案

这被修改为返回 InternalServerError,这是我的团队在公共(public)应用程序中使用的,其中所有未批准的请求都由该 Controller 处理:

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,其中请求未知 Controller 和操作的请求由 ErrorController 检索。

编辑:添加另一个示例,这是您返回一般错误消息的方式,假设您要调用的操作(函数)返回一个 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"));
}
}

然后您将在 Controller 中创建一个辅助方法,如下所示:

private SomethingFailedResult SomethingFailed(string contents, HttpControllerContext context)
{
return new ExpectionFailedResult(contents, context);
}

关于c# - 当 asp.net 5 web api 中的代码错误时返回 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com