gpt4 book ai didi

c# - 如何在 mvc c# 中获取 HttpContext.Current.User 作为自定义主体

转载 作者:行者123 更新时间:2023-11-30 17:38:19 27 4
gpt4 key购买 nike

我正在尝试将 HttpContext.Current.User 与我自己的继承自 IPrincipal 的类一起使用。我不太确定为什么..

var lIdentity = new UserIdentity(lFormsTicket);
var lRoles = lAuthUser.Roles.Select(x => x.Role.ToString()).ToArray();
var lPrincipal = new GenericPrincipal(lIdentity, lRoles);

System.Web.HttpContext.Current.User = lIdentity;

在我设置它之后它就起作用了。但是,如果我在该站点上执行另一个请求,它会说它无法转换。我在这里遗漏了什么吗?

最佳答案

您将 User 设置为 IIdentity 而它应该是 IPrincipal

var lIdentity = new UserIdentity(lFormsTicket);
var lRoles = lAuthUser.Roles.Select(x => x.Role.ToString()).ToArray();
var lPrincipal = new GenericPrincipal(lIdentity, lRoles);

System.Web.HttpContext.Current.User = lPrincipal;

您可能需要使用自己的自定义 IPrincipal

public class UserPrincipal : IPrincipal {
string[] roles;

public UserPrincipal (IIdentity identity, param string[] roles) {
this.Identity = identity;
this.roles = roles ?? new string[]{ };
}

public IIdentity Identity { get; private set; }

public bool IsInRole(string role) {
return roles.Any(s => s == role);
}
}

我不确定应用程序是否会提示,因为它可能需要一个 ClaimsPrincipal 派生类型。

关于c# - 如何在 mvc c# 中获取 HttpContext.Current.User 作为自定义主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com