- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,快速说明我到底想要实现什么:将特定异常转换为 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
与它一起工作。什么时候on
那么它永远不会重定向到 customErrors
中指定的页面:<error statusCode="404" redirect="404.html"/>
。
我也尝试过筹集new HttpExcepton(404, "Not Found")
来自处理程序,但响应代码是 200
我不明白为什么。
所以问题是:
AnException
进入 HTTP 404
回应?customErrors
怎么样?处理 Application_Error 中的异常时该部分工作吗?谢谢,
德米特里。
最佳答案
简而言之,如果您在 Application_Error 中手动设置 HTTP 状态,您将失去使用 customErrors 部分处理程序的可能性,因为您调用了 Server.ClearError()。
在Application_Error之前处理异常或从HttpException派生异常。
最好在Controller中处理异常。您可以引入基类 Controller 并在自定义 HandleError 属性中处理大多数异常。您可以抛出 HttpException,它将由 customErrors 部分处理程序正确处理。
您还可以从 HttpException(404) 派生 ObjectNotFoundException 异常
Application_Error 是处理异常的最后机会。您只有 Response API 来处理它。您可以手动设置状态代码并写入响应或手动触发重定向到自定义错误页面或调用 Server.TransferRequest() 到现有的 html 或 aspx 文件(而不是 Controller 操作)。在当前的asp.net版本中,您无法设置或更改Application_Error方法中的Server.GetLastError,只能检索或清除它。
通过调用 Server.ClearError(),您还可以清除当前请求错误,因此它不会由 customErrors 部分处理程序处理
您不应该在 Application_Error 方法中抛出任何异常。异常意味着您的错误处理失败。
关于asp.net - 将异常转换为 Application_Error 中的 HTTP 404 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808121/
在 Webform1.aspx.cs 中: protected void Page_Load(object sender, EventArgs e) { throw new Exception
如果 URL 存在,我有一些代码可以显示按钮: try { string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
我的 Global.asax 文件中有以下代码: protected void Application_Error() { var exception = Server.GetLastErro
我正在尝试运行一个将异常记录到数据库的 ASP.NET 应用程序。我正在使用 Application_Error 来捕获异常。 在添加连接字符串之前,只是为了测试我的代码(Logger 类和 Glob
我使用 Application_Error 来处理 ASP.NET MVC 3 应用程序中的错误。今天我注意到,对于一个特定的错误情况,此方法被调用了两次:请求带有前导下划线的资源时,例如_ViewS
最近我们开始发现一个问题,即在与处理请求的线程不同的线程上调用 Application_Error 事件处理程序(对于 HttpApplication.Error )。 我们最近改变的事情: 32 位
Application_Error 未在生产服务器上触发。但它在我们的本地服务器和其他亚马逊服务器上工作。我们的本地服务器有Windows7操作系统和IIS(7.5)版本,但生产服务器有Windows
所以我有一个全局错误处理程序,它会在我的应用程序出现错误时发送电子邮件。这很好用,但是,有一些错误(即可怕的“对象引用未设置到对象的实例”错误)极难追踪。我有一个简洁的函数,可以为我将序列化模型转换为
我正在尝试进行重定向,我有一个单例类,它是我的配置类,获取关于它的信息并使用我的连接字符串,这些数据我保存在一个加密文件中,我正在使用 session-per-请求,然后在安装之前我需要检查 sess
我必须在 Application_Error 处理程序中进行异步调用。所以我用 async 关键字定义了这个处理程序,但它不会在异常时触发。 protected async void Appl
如何从 Application_Error 重定向到另一个页面? 目前我在做 Response.Redirect("~/Account/LogOn"); 但我想做一些类似RedirectToActio
在过去的 2 周里,我遇到了一个我无法解决的案例,也许你们已经解决了同样的问题或者听说过/阅读过它并且可以帮助我。 我有一个在我的机器和其他机器上运行的 ASP.NET 项目,每次我尝试调节 Quer
我有一个名为 LogErrorAttribute 的全局异常过滤器: public class LogErrorAttribute : IExceptionFilter { private I
我正在尝试找出如何从 MVC 中的 Application_Error 方法创建异步调用。 我有一个我编写的电子邮件 dll,它使用 Smtp 客户端通过异步调用发送电子邮件。 问题是,当我在我的 d
我有一个 Asp.Net 4.0 Web Forms 应用程序在某些时候抛出以下错误 “Server Error in ‘/MySiteDev’ Application” . 这个错误只是偶尔出现。此
在 VS2010 SP1 中调试我的 MVC 4 应用程序时,Application_Error()处理程序被调用,但 Server.GetLastError()为空。 protected void
我使用 Application_Error 处理程序来记录所有未处理的异常;一般来说,它运行良好,但总是会跳过 404 错误。有什么想法可能是什么原因吗? 最佳答案 实际上,这是因为您的网络服务器返回
我想在全局范围内捕获这些类型的错误,以便我可以将它们记录到数据库中并向用户显示一条友好的消息:500、403 和 404。我正在使用 Log4Net 处理错误。 void Application_Er
我试图找到一个在所有 Application_Error 事件处理程序之后立即触发的事件,以便我可以修改发送的响应(弄乱状态代码和“位置” header 并创建一个新的正文)使用自定义 HttpMod
我正在尝试在我的 MVC 应用程序中实现全局错误处理。 我的 Application_Error 中有一些逻辑重定向到 ErrorController 但它不起作用。 我在 Global.aspx 的
我是一名优秀的程序员,十分优秀!