捕获/重定向404(ASP.NET)

时间:2010-12-23 14:29:57

标签: asp.net module handler http-status-code-404

我注意到当我在ASP.NET(webforms)中请求一个不存在的页面时,'StaticFile'处理程序处理错误通知。

我希望在这些情况下更有帮助。

拦截这个404的正确方法是什么,因此,运行一些代码来重定向用户?

我认为我目前不喜欢的两种方式是:

1 - 创建一个基本上执行if (!file.exists($url){redirect to $correctedurl})

的模块

2 - 修改error.aspx.cs(或默认错误页面)做类似的事情(哎呀!)

4 个答案:

答案 0 :(得分:1)

网络配置有一个customErrors部分,可让您指定指向特定错误代码的位置。

如果您想在首次发出请求时拦截请求,则需要Global.asax并响应BeginRequest事件。此时,您可以确定服务器上是否存在文件,上下文中是否存在Response.Redirect。只需确保您了解每个请求都会通过该事件,包括JS文件,CSS和图像。 HttpApplication Documentation

答案 1 :(得分:1)

为了捕获404,您必须修改两个区域。第一个是IIS本身,它将处理任何非aspx文件,如css,jpg,js等。第二个是应用程序本身的web.config,它将处理缺少的aspx。

以下链接显示了如何完成此任务。

请参阅here

答案 2 :(得分:0)

创建一个响应应用程序HttpModule - 事件的Error。在这里,您可以访问响应的ExceptionStatusCode,如果代码是404(NotFound),您可以相应地响应它。通常重写请求,将StatusCode设置为Found并清除Exception。这样,web.config中的customErrors就不会被命中,进程将是$ RequestedUrl - > $ CorrectedURL。

这是创建一个响应asp.net中错误事件的HttpModule的示例。

http://www.codeproject.com/KB/aspnet/GlobalErrorHandler.aspx

答案 3 :(得分:0)

只需在web.Config

中摇动CustomErrors即可
<configuration>
  <system.web>
    <customErrors defaultRedirect="Error.htm"
                  mode="RemoteOnly">
      <error statusCode="404"
             redirect="~/NotFound.aspx"/>
    </customErrors>
  </system.web>
</configuration>