当前位置: 首页 > 知识库问答 >
问题:

ASP.NET 5 web api中的代码错误时返回500内部服务器错误

诸葛砚文
2023-03-14

我的大多数功能都涉及检查是否存在某些东西。如果没有,则返回HttpNotFound()。它们还包括检查参数是否正确。如果不是,则返回HttpBadRequest()。如果一切都很好,我通常返回一个OK(dataGoesHere)。

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

共有1个答案

伯和蔼
2023-03-14

这是我的团队在公共应用程序中使用的,它被修改为返回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;
    }
}

除此之外,我们还使用自定义DefaultHttpControllerActionSelector和自定义ApiControllerActionSelector,其中请求未知控制器和操作的请求由ErrorController检索。

Edit:添加另一个示例,假设您要调用的操作(函数)返回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);
}
 类似资料:
  • 在尝试使用Twython进行简单的推特搜索时 我得到了这个错误: 这里可能有什么问题?

  • 问题内容: 这是我在laravel 5中测试的ajax(请参阅下文) 和触发链接 和我的路线 但是当我在google chrome中运行控制台时,它给了我错误,并且未返回预期的响应“在laravel 5中返回’成功!ajax’;” POST http://juliver.laravel.com/test 500(内部服务器错误) 我的代码有什么问题/问题?我缺少什么? 问题答案: 虽然这个问题存在

  • 我使用spring ide在本地机器嵌入式apache服务器上部署了spring boot web应用程序,并访问了一个带有错误令牌的url,在这种情况下,它会返回未经授权的访问错误401和托管异常处理抛出的特定错误消息,而如果我在独立但相同的apache服务器上部署相同的应用程序,它会给我500个内部服务器错误而不是401或任何其他服务器端错误。 我捕获的日志只有以下一行不同: 下面是我用来处理

  • 这是我在laravel 5中的测试ajax(参考下面) 以及触发链接 我的路线呢 但它给我一个错误,当我在谷歌chrome运行控制台,它不返回预期的响应返回成功!Ajax在laravel 5';" 邮递http://juliver.laravel.com/test500(内部服务器错误) 我的代码有什么问题?我遗漏了什么?

  • 我在jmeter V3中录制了脚本。3通过IE浏览器,然后进行关联。当我运行这个脚本时,它会收到内部服务器错误500的响应,但是它在IE浏览器中手动工作正常,而且在记录这个场景时,它不会发生。 我还在网络IE F12开发者工具中交叉验证了头管理器和请求头,它是最新的。 取样器请求 获取请求 它只是一个简单的获取请求。非常感谢您在jmeter中帮助处理此错误。

  • 问题内容: 我正在尝试为这个工作中的项目学习AJAX。我有一个网站加载病人正在服用的药物。 我递归调用此AJAX函数,以便它将附加一个包含单种药物和7天历史记录的新表。我在使代码在FF和IE中执行时遇到问题。在chrome中效果很好。我有显示xmlhttp.status的警报,这是我得到的: xmlhttp.status == 500(内部服务器错误)。 我注释掉了所有递归,因此将其范围缩小到了这