Asp.net 在应用程序错误中将异常转换为HTTP 404响应
首先,快速实现我想要实现的目标:将特定异常转换为HTTP 404,以便ASP.NET能够进一步处理它 我以这种方式处理ASP.NET(MVC2)中的异常:Asp.net 在应用程序错误中将异常转换为HTTP 404响应,asp.net,error-handling,http-status-code-404,application-error,Asp.net,Error Handling,Http Status Code 404,Application Error,首先,快速实现我想要实现的目标:将特定异常转换为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.G
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??");
}
问题是我无法配置defaultcustomErrors
来处理它。当它处于打开状态时,它从不重定向到在自定义错误:
中指定的页面
我还试图从处理程序中提出新的HttpExcepton(404,“未找到”)
,但是响应代码是200
,我不明白为什么
因此,问题是:
404
响应的正确方法是什么customErrors
部分如何工作Dmitry.简单地说,如果您在应用程序错误中手动设置HTTP状态,您将失去使用customErrors节处理程序的可能性,因为您调用了Server.ClearError() 在应用程序出错之前处理异常,或从HttpException派生异常
- 将异常转换为HTTP 404响应的正确方法是什么
- 在处理应用程序错误中的异常时,customErrors部分是如何工作的
- 为什么抛出HttpException(404)会以成功(200)状态呈现(空白)页面
在应用程序错误方法中不应引发任何异常。异常意味着您的错误处理失败。
最好在Controller中处理异常
-也许吧,但它不会捕获我确实需要的非Mvc异常<代码>从HttpException派生ObjectNotFoundException异常-不可能,它是来自数据层的异常,与HTTP无关<代码>您可以手动设置状态代码并写入响应-在这种情况下,自定义错误
配置将不会启动<代码>手动触发重定向到自定义错误页面-那我们为什么会有*自定义*错误
部分。这么简单的事情,但有这么多障碍,-只要在给定的异常上启动customError处理程序即可。Dmitry,我同意您的看法,在应用程序错误中更改Server.GetLastError即可。但是当前的ASP.NETAPI不允许这样做。“但它不会捕获我确实需要的非Mvc异常。”-您应该能够通过使用标准或实现自定义HandleError属性来捕获控制器级别的所有异常。尽量避免在视图渲染期间引发异常。如果您在视图呈现期间遇到异常,那么本文可能会对您有用:Andrej,我无法捕获控制器级别的所有异常,因为应用程序中有常规WebForms页面和其他非MVC部分,因此处理所有错误的唯一位置是全局应用程序对象。这很好,我只是不知道如何从那里“返回”404,这样它将由customErrors
处理。Dmitry,在应用程序错误中不能这样做。但您可以轻松地实现与customError节处理程序类似的功能。检查此链接: