asp.net – 在Application_Error中将异常转换为HTTP 404响应
首先,快速完成我想要实现的目标:将特定异常转换为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中手动设置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方法中抛出任何异常.异常表示您的错误处理失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – ASP.NET MVC中WebForms的Maste
- asp.net – 表单认证ReturnUrl和子域名用于单点登
- asp.net-mvc – 在Html.BeginForm()中使用RouteV
- asp.net-mvc – ASP.NET MVC – 单元测试过度杀毒
- asp.net – 如何通过ADO.NET运行我的.sql脚本文件
- asp.net-mvc-4 – MVC 4 – EF模型w / Spaces
- asp.net-web-api – 使用SimpleInjector有没有办
- asp.net-mvc – Razor如何创建一个CheckBox并使其
- asp.net-mvc – 如何使用AngularJs显示MVC登录的
- asp.net-mvc – MVC3中的OutputCache和Authorize