0

四个我们当前的 .aspx 网站,我们有一个自定义的 HttpModule,它执行授权(哪个用户可以看到什么)。我已经将我们旧的 .aspx 网站重建为 MVC。而且因为我们的客户不会全部切换到 MVC 网站,所以我不能使用 MVC 的 Action 过滤器,但我需要继续使用 HttpModule。

问题是我收到 Http 错误 404。

我所做的: - MVC 应用程序已正确部署(已验证,因为没有在 IIS 中配置 HttpModule 它可以正常工作);- 在 Web.Config 和 IIS7.5 中为 HttpModule 进行了适当的配置(这是经过验证的,因为我从 HttpModule 将日志写入文件以查看模块是否首先被调用并按预期运行)

Web.config 文件:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
            <add name="WebHIS_Authorization" type="WebHIS_Authorization.AuthorizationModule" />
        </modules>
  </system.webServer>

所以一切似乎都很好。HttpModule 的 BeginRequest 根据日志输入。我什至在我的日志文件中验证了在 HttpModule 离开 BeginRequest 方法之前,URL 仍然是预期的。但是,在 HttpRequest 离开 HttpModule 并且 IIS 返回 404 之后,似乎 MVC 路由不再起作用。我希望能得到帮助。

如果您需要查看具体内容,请询问,我会提供适当的信息。

4

1 回答 1

0

我还不确定为什么。但是我们得到了上述错误,因为我们试图处理 HTTP 请求生命周期的所有事件。我们在事件上添加了处理程序:

BeginRequest
AuthenticateRequest
AuthorizeRequest
ResolveRequestCache
AcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
UpdateRequestCache
EndRequest

虽然我们只需要 BeginRequest(我们记录了其他事件以供将来参考)。所以我们删除了所有其他事件的处理程序,并将处理程序留在 BeginRequest 上,我们不再收到 http 错误。

很抱歉,我没有关于为什么会发生这种行为的具体信息。我通过反复试验发现了这一点。希望这个线程可以在未来帮助其他人。

于 2013-05-21T07:48:04.883 回答