HttpModule 仅在特定 MVC 路由上

2023-12-07

我有一个习惯IHttpModule我只想在特定路线上工作。

例如 :http://example.com/HandleAzureTask

我希望这个模块只能在/HandleAzureTask route.

由于这不是控制器,我无法真正设置[Authorize]其上的属性;如果用户经过身份验证,如何强制它仅被调用/处理?

我使用的是 ASP.NET MVC 4,目前已将我的模块添加到 web.config 中,如下所示:

<modules>
  <remove name="AzureWebDAVModule" />
  <add name="AzureWebDAVModule" type="VMC.WebDAV.Azure.Module.AzureWebDAVModule, VMC.WebDAV.Azure.Module" />
</modules>

每个请求都会调用 HttpModule(相反,可以过滤 HttpHandler)。如果您只想在选定的路线上执行任务,您可以执行以下操作:

设置这样的路线:

routes.MapRoute(
    name: "AzureWebDAVRoute",
    url: "HandleAzureTask",
    // notice the enableHandler parameter
    defaults: new { controller = "YourController", action = "YourAction", enableHandler = true }
);

在你的模块上:

public class AzureWebDAVModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        // you can't directly access Request object here, it will throw an exception
        context.PostAcquireRequestState += new EventHandler(context_PostAcquireRequestState);
    }

    void context_PostAcquireRequestState(object sender, EventArgs e)
    {
        HttpApplication context = (HttpApplication)sender;
        RouteData routeData = context.Request.RequestContext.RouteData;

        if (routeData != null && routeData.Values["enableHandler"] != null)
        {
            // do your stuff
        }
    }

    public void Dispose()
    {
        //
    }
}

现在您的任务将仅在选定的路线上执行。请注意,您需要该参数,因为您无法按名称找到当前路线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpModule 仅在特定 MVC 路由上 的相关文章

  • ASP.NET MVC HttpException 消息未显示在客户端上

    我正在使用 asp net mvc 构建 RESTful Web api 它返回纯 json 数据 在我的客户端上 我使用backbone js 与其进行通信 我的问题是 如何在 JavaScript 中捕获消息 例如 如果用户没有删除权限
  • 使用 MVC 5 RouteArea 属性时找不到默认区域视图

    我有一个包含多个区域的 MVC5 项目 我有一个默认区域 名为Default 并在其中有一个默认控制器 名为DefaultController 这可以通过站点路径访问 RouteArea public class DefaultContro
  • asp.net mvc 中编辑器模板中复杂类型的 ModelMetadata

    我有一个视图模型 其中包含 TestThing 类型的复杂属性 该属性声明为 public class TestThing Display Name String3 Prompt String4 public string Test1 ge
  • 后退按钮不会导致回发到 MVC 中的控制器操作

    当我在 Win7 上的 IE10 或 Chrome 中单击后退按钮时 它不会到达 MVC 控制器中的断点 IE 开发者工具中的 网络 选项卡显示 304 未修改 并且 Fiddler 未捕获该请求 我期待着回帖 这样我就可以在我的控制器中工
  • 即使在不活动状态下,Hangfire 也会继续运行 SQL 查询

    我正在开发一个 ASP net MVC 5 网站 并使用 Hangfire 来安排一些任务 在本例中每 3 分钟一次 我知道一个事实是 运行这样的任务 以及与之相关的数据库查询 只需要几秒钟 我面临的问题是 Hangfire 似乎让我的 S
  • Spring 集成入站网关 当队列为空时触发事件

    我是新手 但我会尽量简洁 INPUT QUEUE gt INBOUND GATEWAY 1 gt ROUTER gt ACTIVATOR lt gt HOLD QUEUE gt INBOUND GATEWAY 2 我遇到的情况是 我必须像前
  • 重载控制器动作

    几分钟前 当我尝试在我的一个控制器中重载操作时 我有点惊讶 I had public ActionResult Get return PartialView return all things I added public ActionRe
  • 找不到 securityToken 的有效键映射

    我正在开发测试应用程序 用于在 MVC ASP net Visual studio 2013 中显示经过身份验证的身份声明 我已通过以下方式从活动目录进行身份验证 1 在解决方案中添加新的mvc项目 2 单击更改身份验证 3 选择组织账户
  • 为什么在 VS2008/Casini 中启动调试时 Application_Init 会触发两次?

    为什么在 VS2008 Casini 中启动调试时 Application Init 会触发两次 是的 它发生在 global asax 中 虽然看起来相当随机 但只偶尔发生一次 我假设您引用的是 ASP NET MVC 应用程序中的 Gl
  • 为什么有多个 DbContext 类?

    当我使用 LINQ 和 dbml 文件进行编程时 只有一个上下文 但是 当我创建一个 MVC 站点时 似乎每个实体都有单独的上下文 这是 MVC 教程向我展示的方式 使用 电影 上下文 I have public class Account
  • 我何时以及为什么应该考虑 asp.net MVC?

    我最近注意到很多关于 asp net MVC 的讨论 但我还没有找到关于何时 何地或为何要在 WebForms 上使用它的清晰或令人信服的描述 假设我想构建一个小型 Web 应用程序 允许人们在线宣传某些商品 该网站将有 4 个用例 搜索广
  • 删除高图表上的导出和打印按钮插件

    我正在使用 MVC 目前正在使用 highchart 我正在使用 Exporting js 以便用户可以打印或导出 highchart 图表 我的视图中有两个图表 我想禁用其中一个图表的打印和导出 我怎样才能做到这一点 Exporting
  • ASP.NET MVC RemoteAttribute 验证不起作用 - 操作未执行

    我一直在绞尽脑汁试图找出为什么 ValidationController 操作没有被触发 我在项目范围的 web config 中启用了设置
  • 创建视图中可用的自定义助手

    我有太多文本实用方法 例如MakeShortText string text int length RemoveTags string text TimeAgo DateTime date 和别的 我想从单独的助手访问它们 如下一个示例所示
  • 如何测试与 ModelState 一起使用的 ActionFilterAttribute?

    正如卡齐 曼祖尔 拉希德 Kazi Manzur Ra shid 以及其他人 在这篇博文 http weblogs asp net rashid archive 2009 04 01 asp net mvc best practices p
  • 如何在MVC4中隐藏URL参数

    http localhost 49397 ChildCare SponsorChild 83 这是当我单击表中的操作链接并重定向到编辑操作时生成的链接 现在我想隐藏 URL 中的数字 83 我怎样才能实现这一点 我正在使用 VS2010 M
  • 根据当前文化调用不同(本地化)视图

    我在用着LocalizationAttribute它实现了ActionFilterAttribute本地化视图 我简单地说 Localize 在控制器上 我使用 LocalizeStrings resx 文件根据当前线程上的语言进行应用 一
  • 外部剃刀视图看不到外部模型

    我对外部剃刀视图有疑问 在我的项目中 我有主 mvc Web 程序集和动态加载的外部类库程序集 来自 DB 及其自己的控制器 视图和模型 这些程序集在运行时不会直接引用和加载 我能够通过为控制器创建自定义控制器工厂 为视图创建自定义虚拟路径
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • 处理注入的 HttpClient

    我们的 MVC 应用程序使用 HttpClient 调用 WebAPI 操作 我决定使用 StructureMap 注入 HttpClient 并覆盖控制器中的 dispose public HomeController HttpClien

随机推荐