在MVC中,我们可以使用不同的过滤器来装饰动作方法
[HttpPost]
[Authorize]
public ActionResult mymethod(){}
Run Code Online (Sandbox Code Playgroud)
HttpPost派生自MethodSelectorAttribute(可能是间接的)Authorize属性继承自ActionFilterAttribute.
我的问题是:它们在MVC请求管道中执行的顺序是什么?我试图在MVC源代码中搜索,但未能找到相关的代码位.
我有Forms身份验证,我需要一个自定义对象存储在HttpContext.Current.User和Thread.CurrentPrincipal中.
为了得到这个,我听PostAuthenticateRequest事件,然后从DB读取我需要存储在HttpContext.Current.User和Thread.CurrentPrincipal中的所有用户数据,然后我实例化自定义IPrincipal和IIdentity对象并将它们分配给上面位置.
问题是由于某种原因,PostAuthenticateRequest会针对单个请求多次触发..这会导致不必要的DB往返,从而影响性能.
我该如何解决这个问题?(ASP.NET MVC 2)
谢谢.
我已经实现了一个自定义角色提供程序,并在我的web.config文件中配置它,如下所示:
<roleManager enabled="true" defaultProvider="TDRoleProvider" cacheRolesInCookie="true">
<providers>
<clear/>
<add name="TDRoleProvider" type="TDRoleProvider"/>
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
我已经覆盖了我的自定义角色提供程序中的GetRolesForUser函数,我已经介入它,它运行得很好 - 为我正在测试的用户加载了60个角色.但是,我注意到每次调用User.IsInRole的请求都会调用GetRolesForUser.在我编写的其他应用程序中,它只调用一次,然后将结果缓存在cookie中.出于某种原因,缓存不适用于此应用程序.任何想法为什么?