gpt4 book ai didi

asp.net - 将异常转换为 Application_Error 中的 HTTP 404 响应

转载 作者:行者123 更新时间:2023-12-02 18:35:24 24 4
gpt4 key购买 nike

首先,快速说明我到底想要实现什么:将特定异常转换为 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我不明白为什么。

所以问题是:

  1. 正确的翻译方式是什么 AnException进入 HTTP 404回应?
  2. customErrors 怎么样?处理 Application_Error 中的异常时该部分工作吗?
  3. 为什么抛出 HttpException(404) 会呈现(空白)页面并显示成功 (200) 状态?

谢谢,
德米特里。

最佳答案

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

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

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

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

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

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

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

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

  • 为什么抛出 HttpException(404) 会呈现(空白)页面并显示成功 (200) 状态?

您不应该在 Application_Error 方法中抛出任何异常。异常意味着您的错误处理失败。

关于asp.net - 将异常转换为 Application_Error 中的 HTTP 404 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com