在ASP.NET中如何识别/处理404异常?

时间:2011-02-11 03:55:51

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

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

问题是404错误没有特殊的异常类,我得到常规的System.Web.HttpException,其中Message =“文件不存在。”

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

谢谢。

4 个答案:

答案 0 :(得分:18)

您可以尝试将异常强制转换为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
}

答案 1 :(得分:3)

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

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

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

有关详细信息,请参阅:

答案 2 :(得分:2)

你可以捕获异常。你试图在客户端应用程序中捕获这个,对吗?

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;

答案 3 :(得分:1)

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

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