2013-09-16 29 views
1

我在我的.net应用程序中使用asp.net mvc输出缓存,但想控制何时被触发。我有另一个自定义http模块,我需要在输出缓存模块触发之前触发。我在web.config中做了如下修改:控制命令的asp.net mvc httpmodules

<modules runAllManagedModulesForAllRequests="false"> 
     <remove name="OutputCache" /> 
     <add name="MyCustomModule" type="Namespace.MyCustomModule" preCondition="managedHandler" /> 
     <add name="OutputCache2" type="System.Web.Caching.OutputCacheModule"/> 
     <remove name="PassportAuthentication" /> 
     <remove name="Profile" /> 
     <remove name="AnonymousIdentification" /> 
     <remove name="FileAuthorization" /> 
     <remove name="Session" /> 
     <remove name="WindowsAuthentication" /> 
     <remove name="UrlAuthorization" /> 
    </modules> 

问题是它仍然没有控制模块启动的顺序。输出缓存模块仍然在定制模块之前触发。任何方式来管理这个?

我试着创建一个OutputCacheModule的自定义实现,但是因为它是一个密封的类,我无法实现。

任何帮助?

回答

1

我会推荐使用自定义的HttpModule实现IHttpModule接口,并在您的自定义HttpModule的Init方法中订阅PostAuthorizeRequest事件,该事件在MVC应用程序生命周期中的缓存事件之前触发。您将需要将自定义模块添加到web.config中,因为您正在订阅由控制管道的模块中的HttpApplication类触发的事件,所以不需要删除或重新排序模块。您也可以在Global.asax中不使用自定义模块的情况下实现此功能