Asp.net mvc 从Mvc中的控制器重定向后,我无法获取User.Identity.Name
在第一个示例中:- 我正在为变量id分配User.Identity.Name值。我可以在重定向到其他视图后获取该值。我正在使用RedirectReturnUrl。现在我也可以在其他controllerRedirected视图中获取User.Identity.Name值 但在第二个例子中:- 我正在为变量id分配User.Identity.Name值。在我重定向到其他视图之后,我可以获得该值。我在这里使用return RedirectReturnUrl;当我使用return重定向returnurl时;我无法在重定向的url中获取User.Identity.Name值 例1:-Asp.net mvc 从Mvc中的控制器重定向后,我无法获取User.Identity.Name,asp.net-mvc,asp.net-mvc-4,redirect,asp.net-mvc-5,forms-authentication,Asp.net Mvc,Asp.net Mvc 4,Redirect,Asp.net Mvc 5,Forms Authentication,在第一个示例中:- 我正在为变量id分配User.Identity.Name值。我可以在重定向到其他视图后获取该值。我正在使用RedirectReturnUrl。现在我也可以在其他controllerRedirected视图中获取User.Identity.Name值 但在第二个例子中:- 我正在为变量id分配User.Identity.Name值。在我重定向到其他视图之后,我可以获得该值。我在这里使用return RedirectReturnUrl;当我使用return重定向returnurl
public ActionResult SignIn(string ReturnUrl)
{
if (ReturnUrl == "/" || string.IsNullOrEmpty(ReturnUrl))
{
ReturnUrl = "/Dashboard";
}
var id=HttpContext.Current.User.Identity.Name;
Response.Redirect(ReturnUrl);
return View();
}
例2:-
public ActionResult SignIn(string ReturnUrl)
{
if (ReturnUrl == "/" || string.IsNullOrEmpty(ReturnUrl))
{
ReturnUrl = "/Dashboard";
}
var id=HttpContext.Current.User.Identity.Name;
return Redirect(ReturnUrl);
}
我的控制器:-在此函数中,如果我返回重定向返回URL;如果使用Response.RedirectReturnUrl,则无法在CompanyRequired筛选器中获取User.Identity.Name值;返回视图;然后可以在CompanyRequired筛选器中获取User.Identity.Name值,但我必须使用return重定向ReturnURL
公司要求的过滤器:-
public class CompanyRequiredAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var coCookie = filterContext.HttpContext.Request.Cookies["CoId"];
if (coCookie == null)
{
var Id= HttpContext.Current.User.Identity.Name.Int(); **//here i need to get the value but i am getting null value**
IdNmList cos = new EmployeeDAL().GetCompany(Id);
if (cos.Count == 0)
{
filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary
{
{ "controller" , "Company"},
{ "action" , "Add"}
});
}
else if (cos.Count == 1)
{
filterContext.HttpContext.Response.Cookies.Add(new HttpCookie("CoId", cos[0].Id.ToString()));
}
else
{
filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary
{
{ "controller", "Company" },
{ "action", "Select" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
base.OnActionExecuting(filterContext);
}
}
在控制器中,您不需要使用HttpContext.Current,用户应该已经可以访问。如果没有HttpContext.Current,我们可以访问该值。重新提取后,如果我使用的是'return RedirectReturnUrl',则无法获取`我认为,我们需要更多关于您如何使用SignIn的信息,因为您在重定向之前调用User.Identity.Name,登录之后调用。我将重定向到此控制器的仪表板我在该筛选器中使用的筛选器无法访问User.Identity.Name值。您知道一旦您离开SignIn的作用域,您的id变量将被销毁吗?
[Authorize,CompanyRequired]
public class DashBoardController : BaseController
{
public ActionResult Index()
{
return View();
}
}
public class CompanyRequiredAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var coCookie = filterContext.HttpContext.Request.Cookies["CoId"];
if (coCookie == null)
{
var Id= HttpContext.Current.User.Identity.Name.Int(); **//here i need to get the value but i am getting null value**
IdNmList cos = new EmployeeDAL().GetCompany(Id);
if (cos.Count == 0)
{
filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary
{
{ "controller" , "Company"},
{ "action" , "Add"}
});
}
else if (cos.Count == 1)
{
filterContext.HttpContext.Response.Cookies.Add(new HttpCookie("CoId", cos[0].Id.ToString()));
}
else
{
filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary
{
{ "controller", "Company" },
{ "action", "Select" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
base.OnActionExecuting(filterContext);
}
}