【问题标题】:In ASP.NET how to identify/process 404 exceptions?在 ASP.NET 中如何识别/处理 404 异常?
【发布时间】:2011-06-25 07:52:41
【问题描述】:

我需要以不同于所有其他类型的方式处理 404 异常。识别那些 404 异常(将它们与其他异常区分开来)的最佳方法是什么?

问题是没有针对 404 错误的特殊异常类,我得到常规 System.Web.HttpException with Message = "File does not exist."

我应该只使用异常消息还是有更好的方法?

谢谢。

【问题讨论】:

  • 在哪里处理?在 Global.asax 应用程序错误处理程序中?在调用另一个 ASP.NET 应用程序(即 Web 客户端)的代码中?
  • 在服务器端的 global.asax 中处理。

标签: asp.net exception-handling http-status-code-404


【解决方案1】:

我建议您将应用程序配置为将 404 错误重定向到特定页面,例如 ~/FourOhFour.aspx。在此页面中,您可以检查 aspxerrorpath 查询字符串参数,该参数将报告用户尝试访问的页面。从这里您可以做各种有趣的事情,从记录 404 到给自己发电子邮件,再到尝试确定正确的 URL 并将用户自动重定向到该 URL。

要配置您的 Web 应用程序以将用户重定向到面对 404 的自定义页面,请将以下标记添加到 web.config<system.web> 部分:

<customErrors mode="On" defaultRedirect="~/GeneralError.aspx">
    <error statusCode="404" redirect="~/FourOhFour.aspx" />
</customErrors>

有关详细信息,请参阅:

【讨论】:

  • 谢谢。我已经在做所有这些了,但这不是问题。我的问题是即使重定向有效并且我需要在那里处理它,仍会在 global.asax 中引发异常。如何判断异常是 HTTP 404 而不是另一个?
【解决方案2】:

在 Web.Config 文件中,您可以为每个错误代码指定一个单独的文件。

<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="404" redirect="FileNotFound.aspx" />
    </customErrors>

【讨论】:

  • 我已经这样做了,但是我描述的异常仍然被抛出,我仍然需要在 global.asax 中正确处理它。
【解决方案3】:

您可以捕获异常。您正试图在客户端应用程序中捕捉到这一点,对吗?

HttpWebRequest req = ( HttpWebRequest )WebRequest.Create( someURL );
try
{
    HttpWebResponse resp = req.GetResponse();
}
catch( WebException webEx )
{
   if( webEx.Response != null )
   {
      HttpWebResponse response = webEx.Response as HttpWebResponse;
      switch( response.StatusCode )
      {
         case HttpStatusCode.NotFound:
             // do something
             break;

【讨论】:

  • 不,这是一个纯服务器端:global.asax。我捕获异常没有问题,我的问题是将其识别为 HTTP 404。
【解决方案4】:

您可以尝试将异常转换为HttpException,然后使用GetHttpCode方法检查是否为404。

例如:

Exception ex = Server.GetLastError();

HttpException httpEx = ex as HttpException;

if (httpEx != null && httpEx.GetHttpCode() == 404)
{
   //do what you want for 404 errors
}

【讨论】:

  • 太棒了!谢谢!就是这个!
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多