【问题标题】:How to enable custom http module for a particular controller in ASP.NET MVC 3如何在 ASP.NET MVC 3 中为特定控制器启用自定义 http 模块
【发布时间】:2012-01-12 06:39:56
【问题描述】:

我有一个第三方自定义身份验证 HTTP 模块。我希望将此模块配置为控制器的特定操作方法。这可能吗?

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

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc httpmodule


    【解决方案1】:

    您无法将 Http 模块启用到特定控制器,但您可以将其启用到 web.config 中的特定请求路径。这有效地完成了工作。以下 web.config sn-p 仅对匹配“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的信息。

    【讨论】:

    • 注意VS开发服务器不使用http模块;您必须切换到 IIS Express 进行开发。
    【解决方案2】:

    我相信您正在寻找操作过滤器。网络上有许多示例演示了如何设置它们。

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

    【讨论】:

    • 我不看动作过滤器。正如我在问题中所说,我必须使用第三方开发的自定义 HTTP 模块。
    • 我不相信这是可能的。动作过滤器是在 MVC 中实现您想要实现的目标的唯一方法。
    【解决方案3】:

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

    【讨论】:

    • 正如我在问题中提到的,我必须使用第三方自定义 HTTP 模块。我无法控制。
    • 那么另一种可能性是,将其包装到另一个 HttpModule 中,只有在请求某个 URL 时才会执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多