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

发生异常时,Web Api始终返回http状态代码200

劳仲渊
2023-03-14
public class GlobalExceptionHandler : ExceptionHandler
{
    public override void Handle(ExceptionHandlerContext context)
    {

        context.Result = new NiceInternalServerExceptionResponse("The current operation could not be completed sucessfully.);
    }
}

调用此获取操作时:

        [HttpGet]
        public async Task<IHttpActionResult> Get()
        {
            Convert.ToInt16("this causes an exception state");
            var data = await service.Get();
            return Ok(data);
        }

会引发一个异常...我的全局exc处理程序被触发。

当我的自定义响应返回给客户端时,我的小提琴手总是说:

结果:200

我还可以更改<code>返回Ok(数据)to返回NotFound()

这不会更改结果状态代码中的任何内容。

如何覆盖/拦截http状态创建并返回我自己的状态代码500?

在我的Web客户端上,我需要显示一个漂亮的错误对话框,仅当返回状态代码500时,才会显示日志记录ID错误消息。


共有3个答案

益阳平
2023-03-14

您可以使用下一个代码来处理自定义错误:

return Content(HttpStatusCode.NotFound, "Foo does not exist.");
浦毅
2023-03-14

我这样做...

    [HttpPost]
    public HttpResponseMessage Post()
    {
        try
        {
            // Do stuff
        }
        catch (Exception ex)
        {
            // Something went wrong - Return Status Internal Server Error
            return new HttpResponseMessage(HttpStatusCode.InternalServerError);
        }
    }

对于Get也一样。

微生恩
2023-03-14
匿名用户

您需要在IHttpActionResult上设置状态码:

public class NiceInternalServerExceptionResponse : IHttpActionResult
{
    public string Message { get; private set; }        
    public HttpStatusCode StatusCode { get; private set; }

    public NiceInternalServerExceptionResponse(
        string message, 
        HttpStatusCode code)
    {
        Message = message;
        StatusCode = code; 
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = new HttpResponseMessage(StatusCode);
        response.Content = new StringContent(Message);
        return Task.FromResult(response);
    }
}

在<code>GlobalExceptionHandler<code>中,传递<code>HttpStatusCode。InternalServerError(500):

public override void Handle(ExceptionHandlerContext context)
{
    context.Result = new NiceInternalServerExceptionResponse(
        "The current operation could not be completed sucessfully.",
        HttpStatusCode.InternalServerError);
}

 类似资料:
  • 我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422

  • 我正在做一个新项目,我想实现一个“等到网站打开”功能,如果http://switch-check.cf/index.php打开,然后继续。 现在,在我的帮助下。htaccess和php我尽了最大的努力。禁止访问php文件。因此,如果你试图访问我提到的网页,你应该得到一个 403拒绝访问 因此,我使用urllib(也尝试了请求)查看网站是否已打开或仍处于禁止访问状态然而,无论我尝试什么,我总是得到2

  • 我正在按照一些教程从头开始建立一个spring mvc项目。最初,我将web应用程序配置为在Tomcat中运行。我编写了一个简单的controller类,请求点击“/”。但tomcat总是向我显示“HTTP状态404-找不到”错误。 我看了很多这样的问题,但那些答案对我都不起作用 删除tomcat安装并重新配置。当点击localhost:8080/时,我将获得tomcat主页。 检查了代码的拼写

  • 我正在使用Eclipse和Tomcat Server 7开发一个带有String框架的web应用程序。当我运行它时,我总是得到同样的错误: HTTP状态500-处理JSP页面/views/misc/index时发生异常。jsp第19行 第19行是:<代码> 有时候在我不停刷新页面的时候是可以的,但是不知道为什么。 misc/index.jsp 这是欢迎视图的index.jsp页面 堆栈跟踪: 根本

  • 问题内容: 我们正在使用Flask作为我们的API之一,我只是想知道是否有人知道如何返回HTTP响应201? 对于诸如404之类的错误,我们可以致电: 但是对于201我得到 LookupError:201都不例外 我是否需要创建自己的例外,像这样的文档? 问题答案: 你可以在这里阅读。

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头