我已经为ASP.Net标识实现了自定义原则,但是当我尝试从 HttpContext.Current.User 获取自定义原则时,我收到以下异常:
无法转换类型为#System; Security.Principal.GenericPrincipal'的对象。输入' VenuePortal.Business.ICustomPrincipal'。
我的实施是:
$first = new DateTime("2015/12/02 07:59:15");
$second = new DateTime("now");
if( $first > $second ) {
//its bigger!
}
此Ninject绑定中出现错误:
public interface ICustomPrincipal : IPrincipal
{
int UserID { get; set; }
string UserName { get; set; }
string Email { get; set; }
string AuthCode { get; set; }
string Title { get; set; }
}
public class CustomPrincipal : ICustomPrincipal
{
public int UserID { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string AuthCode { get; set; }
public string Title { get; set; }
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) { return false; }
public CustomPrincipal(string email)
{
Identity = new GenericIdentity(email);
}
}
我有同样的解决方案在另一个(较旧的)项目中工作,所以我猜测是否存在某种影响这种情况的框架变化? HttpContext.Current.User 似乎仍然会返回一个 IPrinciple ,所以不应该这样做吗?
任何帮助都非常感激。
答案 0 :(得分:1)
HttpContext.Current.User
确实是实现IPrincipal
,如果你使用的是Asp.Net Identity框架,那么它背后的对象通常是GenericPrincipal
。 GenericPrincipal
是.Net框架的一部分,它无法实现您的ICustomPrincipal
界面。
如果您希望在User
对象上执行扩展方法以获取额外数据,则几乎没有不同的方法(使用声明就是其中之一)。但创建自己的CustomPrincipal
已成为过去,现在有更简单的方法可以做到这一点。
答案 1 :(得分:0)
我发现这是在用户未登录时引起的。我找到了两个解决方案:
我希望这有助于其他人。