如何在ASP.NET MVC 3中为特定控制器启用自定义http模块

本文关键字:控制器 启用 自定义 模块 http ASP NET MVC | 更新日期: 2023-09-27 18:20:01

我有一个第三方自定义身份验证HTTP模块。我想把这个模块配置成控制器的特定动作方法。这可能吗?

我知道我们可以通过在文件夹级别拥有适当的web.config来在文件夹级别进行配置,但我正在寻找特定控制器的特定操作方法。

如何在ASP.NET MVC 3中为特定控制器启用自定义http模块

您不能将Http模块启用到特定的控制器,但可以将其启用到web.config中的特定请求路径。这有效地完成了imo的工作。以下web.config代码段仅对与"yourController"路径匹配的请求启用"ThirdParty.HttpModule"。这应该也适用于MVC、WebForms和通用处理程序。

<location path="yourController" inheritInChildApplications="false">
  <system.web>
    <httpModules>
      <add name="yourModule" type="ThirdParty.HttpModule"/>
    </httpModules>
  </system.web>
</location>

如果此应用程序的子目录中有任何其他应用程序,则inheritInChildApplications部分非常重要,因为默认情况下,子应用程序将继承此配置,并且您可能不希望此模块在子应用程序中工作。

MSDN上的更多信息。

我相信您正在寻找动作过滤器。网上有很多示例可以用来演示如何设置它们。

http://msdn.microsoft.com/en-us/library/dd381609%28v=VS.98%29.aspx

您应该为此使用ActionFilters。如果您真的想使用HttpModule,那么该模块必须检查它是否应该基于URL执行其逻辑。HttpModule对您的控制器一无所知,反之亦然。