我注意到当我在ASP.NET(webforms)中请求一个不存在的页面时,'StaticFile'处理程序处理错误通知。
我希望在这些情况下更有帮助。
拦截这个404的正确方法是什么,因此,运行一些代码来重定向用户?
我认为我目前不喜欢的两种方式是:
1 - 创建一个基本上执行if (!file.exists($url){redirect to $correctedurl})
2 - 修改error.aspx.cs(或默认错误页面)做类似的事情(哎呀!)
答案 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
。在这里,您可以访问响应的Exception
和StatusCode
,如果代码是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>