我需要以不同于其他所有类型的方式处理404异常。识别这些404例外的最佳方法是什么(将它们与其他例外区分开来)?
问题是404错误没有特殊的异常类,我得到常规的System.Web.HttpException,其中Message =“文件不存在。”
我应该只使用异常消息还是有更好的方法?
谢谢。
答案 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>