我需要处理404个异常,而不是所有其他类型的异常。识别这些404例外情况的最佳方式是什么(区别于其他例外情况)?在ASP.NET中如何识别/处理404例外?
问题是,没有一个特殊的404错误异常类,我得到正常的System.Web.HttpException与消息=“文件不存在”。
我应该只是使用异常的消息或有更好的方法吗?
谢谢。
我需要处理404个异常,而不是所有其他类型的异常。识别这些404例外情况的最佳方式是什么(区别于其他例外情况)?在ASP.NET中如何识别/处理404例外?
问题是,没有一个特殊的404错误异常类,我得到正常的System.Web.HttpException与消息=“文件不存在”。
我应该只是使用异常的消息或有更好的方法吗?
谢谢。
你可以试着投例外作为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
}
我建议你配置你的应用程序,将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>
欲了解更多信息,请参见:
谢谢。我已经在做所有这些,但这不是问题。我的问题是,即使重定向工作,我仍然需要在那里处理异常仍然在global.asax抛出。我怎么知道异常是HTTP 404而不是另一个呢? – 2011-02-11 04:41:19
在Web.config文件里,可以指定一个单独的文件为每个错误代码。
<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
<error statusCode="404" redirect="FileNotFound.aspx" />
</customErrors>
我已经这样做了,但我描述的异常仍然抛出,我仍然需要在global.asax中正确处理它。 – 2011-02-11 04:38:40
您可以发现异常。你试图在客户端应用程序中捕获这个问题,对吗?
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. – 2011-02-11 04:39:38
处理这种情况?在Global.asax应用程序错误处理程序中?在调用另一个ASP.NET应用程序(即Web客户端)的代码中? – 2011-02-11 04:28:49
在服务器端的global.asax中处理。 – 2011-02-11 04:37:47