13

我正在使用下面的 web.config 代码将对丢失页面的请求重定向到 404 错误处理页面:

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.aspx"/>
</customErrors>

当我查找诸如“missing.aspx”之类的页面时,它可以正常工作,但它不适用于没有“.aspx”扩展名的页面,例如“missing.asp”或只是“missing”。当它不起作用时,它只会加载一个标准的 IIS 7.5 错误页面。

我究竟做错了什么?我正在使用.net 4。我注意到其他人问同样的问题,但他们没有得到答案。

谢谢!

4

3 回答 3

9

正如dbaseman所说,这是因为非 asp.net 文件不会调用 asp.net 处理程序。强制 asp.net 处理程序对所有请求进行操作的一种简单方法是在 web.config 中设置以下内容。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
</system.webServer>

这告诉 IIS 为所有请求(例如 .html、.jpg、.css、.js 等)运行所有托管模块。这通常是不受欢迎的,因为它只会引入额外的处理和延迟。

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

另一个尝试的选项(比上面更干净)作为答案发布在这里:https ://stackoverflow.com/a/6661699/701062

于 2012-06-15T07:10:49.723 回答
4

原因是非 ASPX 扩展永远不会进入 ASP.NET 处理程序。您看到的那些错误来自 IIS。在 web.config 中的system.webServer下有一个单独的部分httpErrors,您需要对其进行配置以处理这些错误。请参阅此处了解更多信息。

链接中的示例:

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>
于 2012-06-15T06:39:42.573 回答
1

将以下内容添加到 Web.config:

<system.webServer>    
    <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
      <remove statusCode="404" />
      <error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
    </httpErrors>
  </system.webServer>

我取了 Osprey 的代码,并添加了 responseMode="Redirect" 来解决只显示页面源代码的问题。

于 2021-03-15T15:03:10.533 回答