我有一个自定义 IHttpModule
,我只想在特定路由上工作。
例如:http://example.com/HandleAzureTask
我希望此模块仅在 /HandleAzureTask
路由上调用/处理。
由于这不是 Controller ,因此我无法真正在其上设置 [Authorize]
属性;如何强制仅在用户经过身份验证时调用/处理它?</p>
我使用 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()
{
//
}
}
现在您的任务将仅在选定的路线上执行。请注意,您需要该参数,因为您无法按名称找到当前路线。
关于asp.net-mvc - HttpModule 仅在特定 MVC 路由上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798828/