我已閱讀了許多有關此主題的問題和解答,但他們都沒有幫助我解決此問題。在MVC5中無法訪問自定義IPrincipal
我遇到的問題是HttpContext.Current.User
或User
屬性的類型是RolePrincipal
而不是我的自定義主體。
這是使用Windows身份驗證(僅內部網應用程序)的MVC 5 Web應用程序。我的自定義主體是WindowsPrincipal
的子類,我確實實現了我自己的RoleProvider
以用於授權屬性標籤。
當我試圖通過在當前HttpContext上將其轉換爲我的自定義主體從IPrincipal
來使用主體時,我得到一個錯誤,指出它的類型爲RolePrincipal,顯然不能將其轉換爲我的自定義主體。我設置我的自定義主要的Application_PostAuthenticationRequest
事件:
protected void Application_PostAuthenticationRequest(object sender, EventArgs e)
{
if (User == null)
return;
using(EntityContext db = new EntityContext())
{
var user = db.Users.SingleOrDefault(u => u.ADName.Equals(User.Identity.Name));
HttpContext.Current.User = new PcsPrincipal((WindowsIdentity)User.Identity, user);
}
}
當我把在該方法中設置斷點它似乎從來沒有被調用,這可以解釋爲什麼它沒有得到設置爲我的自定義主體。
我查看下面的問題答案,但他們一直沒能解決該問題:
- using custom IPrincipal and IIdentity in MVC3 - 增加在Global.asax.cs中的init方法的事件處理程序的註冊。似乎沒有什麼區別。此外,
_application
變量在MVC5中似乎無效。 - RoleProvider dosn't work with custom IIdentity and IPrincipal on server - 製造在web.config文件中的變化,但有錯誤說,ASP.NET管道被錯誤地配置在運行時這引起了各種錯誤。
什麼我做錯誤不具有主集?讓我知道是否需要發佈更多代碼。
編輯:在WindowsAuthentication.OnAuthenticate事件中將HttpContext.Current.User設置爲我的自定義主體不能解決此問題。使用該方法顯示完全相同的行爲。
使用「WindowsAuthentication.OnAuthenticate」事件展示相同的行爲。 – JNYRanger