Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一次请求后,委托人就迷路了_C#_Asp.net Mvc_Security_Userprincipal - Fatal编程技术网

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,