2011-02-11 40 views
6

我需要处理404个异常,而不是所有其他类型的异常。识别这些404例外情况的最佳方式是什么(区别于其他例外情况)?在ASP.NET中如何识别/处理404例外?

问题是,没有一个特殊的404错误异常类,我得到正常的System.Web.HttpException与消息=“文件不存在”。

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

谢谢。

+0

处理这种情况?在Global.asax应用程序错误处理程序中?在调用另一个ASP.NET应用程序(即Web客户端)的代码中? – 2011-02-11 04:28:49

+0

在服务器端的global.asax中处理。 – 2011-02-11 04:37:47

回答

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 
} 
3

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

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

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

欲了解更多信息,请参见:

+0

谢谢。我已经在做所有这些,但这不是问题。我的问题是,即使重定向工作,我仍然需要在那里处理异常仍然在global.asax抛出。我怎么知道异常是HTTP 404而不是另一个呢? – 2011-02-11 04:41:19

1

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

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

我已经这样做了,但我描述的异常仍然抛出,我仍然需要在global.asax中正确处理它。 – 2011-02-11 04:38:40

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; 
+0

不,这是一个纯粹的服务器端:global.asax。我没有问题发现异常,我的问题是将其识别为HTTP 404. – 2011-02-11 04:39:38