2012-07-30 36 views
2

添加了一個AuthorizeImage事件處理程序來映像訪問限制。當我試圖檢查用戶名和身份驗證狀態時注意到以下幾點:圖像Resizer在事件處理程序中的User.Identity

下面不會導致異常,但似乎會破壞它。無論是否驗證,都會顯示未找到圖像的默認圖標。 測試this.User =相同的結果。 HttpContext.Current.User =相同的結果

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    if (context.User.Identity.IsAuthenticated) { context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); }  
}; 

下面的工作就好了(this.User和HttpCOntext.Current.User以及)

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); 
}; 

這總是重定向

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    if (context.User == null) 
     context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); 
}; 

我開始在Application_Start中測試,但實際上也嘗試了Application_PostAuthenticateRequest。雖然結果相同。我通過自定義代碼進行身份驗證,但使用標準formsatuhentication來設置cookie。 [Authorize]在應用程序中正常工作。任何可能在這裏出錯的建議?

+0

請,如果你得到了「未找到'圖標,直接打開URL並獲取實際的錯誤信息。 – 2012-07-30 22:46:17

+0

抱歉應該補充一點。我只收到nullreference異常,「對象引用未設置爲對象的實例」。標記包含「if(context.User.Identity.IsAuthenticated){context.Response.Redirect(」http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif「);}」的行。 所以context.User沒有實例化它似乎。問題是爲什麼。由於身份驗證在其他方面工作(和@ User.Identity.Name在視圖中給我的用戶名)我懷疑有關事件處理程序的東西? – Baserz 2012-07-30 22:57:28

+0

ASP.NET不會爲匿名用戶填充context.User。如果您不是匿名的,那麼您的代碼在PostAuthorize之前不會加載用戶,這是一個錯誤。 – 2012-07-30 23:04:01

回答

4

您的服務器被配置爲僅對某些請求擴展(如.aspx,.ashx等)運行FormsAuthenticationModule。有兩種方法可以解決此問題。

  1. 拆下並在<system.webServer> <modules>重新添加FormsAuthenticationModule(用於集成模式),滴前提= 「managedHandler」 屬性:
  2. 啓用RAMMFAR(runAllManagedModulesForAllRequests)

此信息包含有關更多細節執行#1和#2:

How do I protect static files with ASP.NET form authentication on IIS 7.5?

+0

解決方案1似乎解決了這個問題,感謝您的幫助。 – Baserz 2012-07-31 15:52:15

+0

解決方案1是可行的方法。有關RAMMFAR的更多信息,請參閱[SCOTT HANSELMAN的博客文章](http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx),以及爲什麼要避免它。 – 2013-08-23 13:44:22