dot*_*tsa 3 asp.net-mvc routes httpmodule asp.net-mvc-4
我有一个习惯IHttpModule,我只想在特定路线上工作.
例如 : http://example.com/HandleAzureTask
我希望只在/HandleAzureTask路由上调用/处理此模块.
由于这不是控制器,我无法真正设置[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>
Run Code Online (Sandbox Code Playgroud)
每个请求都会调用HttpModules(HttpHandlers,可以过滤).如果您只想在所选路线上执行任务,则可以执行以下操作:
设置这样的路线:
routes.MapRoute(
name: "AzureWebDAVRoute",
url: "HandleAzureTask",
// notice the enableHandler parameter
defaults: new { controller = "YourController", action = "YourAction", enableHandler = true }
);
Run Code Online (Sandbox Code Playgroud)
在您的模块上:
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()
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您的任务将仅在选定的路线上执行.请注意,您需要参数,因为您无法按名称找到当前路线.
| 归档时间: |
|
| 查看次数: |
2841 次 |
| 最近记录: |