PostAuthenticateRequest多次发射

时间:2010-07-07 14:56:24

标签: asp.net asp.net-mvc-2

我有Forms身份验证,我需要一个自定义对象存储在HttpContext.Current.User和Thread.CurrentPrincipal中。

为了得到这个,我听PostAuthenticateRequest事件,然后从DB中读取我需要存储在HttpContext.Current.User和Thread.CurrentPrincipal中的所有用户数据,然后我实例化自定义IPrincipal和IIdentity对象并分配它们到上述地点。

问题在于,由于某种原因,PostAuthenticateRequest会针对单个请求多次触发..这会导致不必要的数据库往返,从而影响性能。

我该如何解决这个问题? (ASP.NET MVC 2)

感谢。

2 个答案:

答案 0 :(得分:5)

您确定单个请求是否多次运行?请记住,页面上引用的每个资源(如图像和样式表)都会触发此事件,因为它们被视为单独的请求。建议您最好快速缓存自定义对象并检查它们是否存在于缓存中,如果不存在则仅访问数据库。

您需要在缓存上实现一些锁定,因为这些请求通常非常接近。

答案 1 :(得分:1)

只需使用web.config中的标记即可从脚本,css和图像目录中删除任何身份验证。例如:

<system.web>
...
</system.web>

<location path="~/Scripts">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>   
</location>