我有一个HttpModule
用于在visual studio开发环境中处理错误。它运作良好。对于客户端,存在严重的404
s并且没有明显的重定向。 Google Analytics应该对此非常满意。
在Visual Studio 2008
中进行调试,当导航到localhost:
[port]/this_page_doesnt_exist.html, I get a our 404 error page and the hard 404.
它也适用于
的开发服务器localhost:[port]/this_page_doesnt_exist.aspx.
当我将它全部移植到我们的IIS7
Web服务器时,我已经完全按照静态HTML文件的方式工作了。但是,我已经确定我的模块根本没有被aspx
文件调用。如果我转向customErrors
Off
,我会看到标准丑陋的404
页面。 (如果customErrors
为RemoteOnly
,则会启用这些内容。)
这些线索似乎指向了一些我没有适当调整的IIS
设置,但我不能为我的生活找到它。有任何想法吗?
更多信息:
我正在以集成模式运行,而我的web.config
包含以下部分:
<configuration>
<system.web>
<httpModules>
<add name="ErrorModule" type="HttpModules.ErrorModule, HttpModules"/>
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<add name="ErrorModule" preCondition="managedHandler" type="HttpModules.ErrorModule, HttpModules"/>
</modules>
</system.webServer>
</configuration>
更多信息
我认为在IIS7
发生的事情并非如此。我在服务器上看到HTML文件的404
错误消息的唯一原因是CustomErrorHandler
本机模块正在获取它。当我关闭该模块时,我现在让ErrorHandler
运行aspx
个文件,但不运行HTML文件。
我必须接近,但我一直在努力让我的设置完成剩下的工作。任何人都可以把我推到球门线上吗?
答案 0 :(得分:1)
我打赌你在使用集成管道时没有在{7}}中为IIS 7正确注册模块。要让HTTP模块在IIS 7中运行良好,您还需要在web.config
部分注册该模块,如下所示:
<system.webServer>
我认为你有<configuration>
<system.web>
<httpModules>
<add name="..." type="..." />
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="..." type="..." preCondition="managedHandler" />
</modules>
</system.webServer>
</configuration>
部分而不是<httpModules>
部分?
另外,您使用的是什么错误记录模块?如果您使用自己的自制烤面包,我建议您使用ELMAH吗?它很容易上手,是开源的,并且被广泛使用,所以你可以放心,它们可以解决这些错误和问题。
快乐编程!
答案 1 :(得分:0)
经过相当多的努力,我的结论是答案是: “您的特定Web服务器上现有模块的交互,以及您的web.config和IIS设置如何支持错误处理,可能导致不常见的特定于开发人员的复杂情况。值得庆幸的是,如果您想添加HttpModule以进行错误处理,问题的变幻莫测是通过开源工具解决的,例如ELMAH“。 (我不能保证ELMAH,但我看了代码,似乎需要做的比我正在做的更多,以使它工作。)
但如果你走到这一步,你应该知道我的工作:
在IIS管理器中,我修改了模块顺序,以便我的错误处理程序在本机CustomErrorModule之前。 (或者,按照您希望的顺序重新指定站点根目录web.config中的所有模块。)仅在托管代码上运行您的模块。
出于某种原因,我的模块没有注意到丢失静态页面的请求,即使它是针对静态页面运行的。考虑一下我未解决的问题(可能是ELMAH解决了这个问题)。
在IIS管理器中,我将错误页面设置为指向自定义错误页面。这是针对静态页面的。它们是设置Response.StatusCode的aspx文件。瞧!一切的硬错误代码。