C# 一次请求后,委托人就迷路了
我在设置C# 一次请求后,委托人就迷路了,c#,asp.net-mvc,security,userprincipal,C#,Asp.net Mvc,Security,Userprincipal,我在设置主体的控制器中具有AffiliateLogin功能 行principal.User=User实际上是存储主体的代码。 但在我重定向到另一个控制器并测试我的AuthorizeWithRolesAttribute属性后,主体被重置。 这是登录后的一秒钟,您可以看到红色箭头: 这是存储它的函数。 我做错了什么? 谢谢 publicJSONResult附件登录(字符串电子邮件、字符串密码) { if(ModelState.IsValid) { 附属用户=api.GetUserByCredenc
主体的控制器中具有AffiliateLogin
功能
行principal.User=User
实际上是存储主体的代码。
但在我重定向到另一个控制器并测试我的AuthorizeWithRolesAttribute
属性后,主体被重置。
这是登录后的一秒钟,您可以看到红色箭头:
这是存储它的函数。
我做错了什么?
谢谢
publicJSONResult附件登录(字符串电子邮件、字符串密码)
{
if(ModelState.IsValid)
{
附属用户=api.GetUserByCredencials(电子邮件、密码);
如果(用户!=null)
{
IIdentity identity=新用户标识(true,user.Email);
UserPrincipal=new UserPrincipal(标识,新字符串[]{“附属”});
委托人。用户=用户;
HttpContext.User=principal;
返回Json(“登录成功”);
}
}
返回Json(“登录失败”);
}
主体属性在web请求之间无法生存。您必须在重定向后的下一个请求中再次设置它。如果您进行自定义身份验证/表单身份验证,则应调用
FormsAuthentication.SetAuthCookie
浏览器中带有该cookie的下一个http,Asp.net将处理该cookie并设置
目前的索赔是本金。所以你可以查一下
var principal = ClaimsPrincipal.Current; //normally this reverts to Thread.CurrentPrincipal,
这里是一个学习更多知识的好地方
如何调用AffiliateLogin?@ChrisBint-这是一个操作:localhost:5555/Api/User/AffiliateLogin/?email=test@gmail.com&密码=密码请解释。我不理解上下文的范围是每个请求。因此,每个请求都是一个新的httpcontext
@JasonMeckley-那么,您可以使用会话在请求之间保留对象的解决方案是什么。请为每个请求设置用户属性。通常在httphandler或actionfilter中。您还可以使用内置身份验证提供程序来处理此问题。(搜索asp.net表单身份验证和通用/简单成员资格提供程序)
var principal = ClaimsPrincipal.Current; //normally this reverts to Thread.CurrentPrincipal,