我已阅读了许多有关此主题的问题和解答,但他们都没有帮助我解决此问题。在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