加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在Application_Error中将异常转换为HTTP 404响应

发布时间:2020-12-16 03:19:12 所属栏目:asp.Net 来源:网络整理
导读:首先,快速完成我想要实现的目标:将特定异常转换为HTTP 404,以便ASP.NET可以进一步处理它. 我用这种方式处理ASP.NET(MVC2)中的异常: protected void Application_Error(object sender,EventArgs e) { var err = Server.GetLastError(); if (err == null) re
首先,快速完成我想要实现的目标:将特定异常转换为HTTP 404,以便ASP.NET可以进一步处理它.

我用这种方式处理ASP.NET(MVC2)中的异常:

protected void Application_Error(object sender,EventArgs e) {
        var err = Server.GetLastError();
        if (err == null)
            return;
        err = err.GetBaseException();

        var noObject = err as ObjectNotFoundException;
        if (noObject != null)
            HandleObjectNotFound();

        var handled = noObject != null;
        if (!handled)
            Logger.Fatal("Unhandled exception has occured in application.",err);
    }

    private void HandleObjectNotFound() {
        Server.ClearError();
        Response.Clear();
        // new HttpExcepton(404,"Not Found"); // Throw or not to throw?
        Response.StatusCode = 404;
        Response.StatusDescription = "Not Found";
        Response.StatusDescription = "Not Found";
        Response.Write("The whole HTML body explaining whata 404 is??");
    }

问题是我无法配置默认的customErrors来使用它.当它打开时,它永远不会重定向到customErrors中指定的页面:< error statusCode =“404”redirect =“404.html”/>.

我还尝试从处理程序中引发新的HttpExcepton(404,“Not Found”)但是响应代码是200,我不明白为什么.

所以问题是:

>将AnException转换为HTTP 404响应的正确方法是什么?
>在处理Application_Error中的异常时,customErrors部分如何工作?
>为什么抛出HttpException(404)呈现(空白)页面成功(200)状态?

谢谢,
德米特里.

解决方法

简而言之,如果您在Application_Error中手动设置HTTP状态,则会失去使用customErrors部分处理程序的可能性,因为您调用了Server.ClearError().

在Application_Error之前处理异常或从HttpException派生异常.

>将AnException转换为HTTP 404响应的正确方法是什么?

最好在Controller中处理异常.您可以引入基类控制器并处理自定义HandleError属性中的大多数异常.您可以抛出HttpException,它们将由customErrors部分处理程序正确处理.

您还可以从HttpException派生ObjectNotFoundException异常(404)

Application_Error是处理异常的最后机会.您只有Response API来处理它.您可以手动设置状态代码并写入响应或手动触发重定向到自定义错误页面或调用Server.TransferRequest()到现有的html或aspx文件(而不是控制器操作).在当前的asp.net版本中,您无法在Application_Error方法中设置或更改Server.GetLastError,只能检索或清除它.

>在处理Application_Error中的异常时,customErrors部分如何工作?

通过调用Server.ClearError(),您还可以清除当前请求错误,因此customErrors部分处理程序不会处理它

>为什么抛出HttpException(404)呈现(空白)页面成功(200)状态?

你不应该在Application_Error方法中抛出任何异常.异常表示您的错误处理失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读