我有一个习惯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(使用前将#替换为@)