[英]Redirect back to location after being redirected to login
我在ASP.NET 4.6 Web窗体应用程序中。
我正在尝试使用声明来检查用户是否被授权像这样的工资页面:
protected void Page_Load(object sender, EventArgs e)
{
if (!ContainsClaim(User.Identity.Name, "role", "admin"))
{
//execute function 1
Response.Redirect("Account/Login.aspx");
}
}
public bool ContainsClaim(string userName, string claimType, string claimValue)
{
ApplicationDbContext context = new ApplicationDbContext();
var user = context.Users.Where(s => s.UserName == "rsadmin").FirstOrDefault();
if (user == null)
{
return false;
}
return user.Claims.Where(s => s.ClaimType == claimType && s.ClaimValue == claimValue).Count() > 0;
}
薪资用户在登录前单击了薪资页面。因此,她被重定向到登录页面。 登录后如何自动将其引导回薪资页面?
有几种选择。
您可以为returnUrl使用查询参数,该参数可以在登录时重定向。 如果确实使用查询参数,请在重定向之前确保将returnUrl实际上设置为站点上的url; 否则,您的网页可能会被黑客用来诱使用户访问一个邪恶的网站。
另一种选择是使用会话(如果可用)来存储有关用户试图访问会话变量并从会话变量重定向的信息。
protected void Page_Load(object sender, EventArgs e)
{
if (!ContainsClaim(User.Identity.Name, "role", "admin"))
{
//execute function 1
Response.Redirect("Account/Login.aspx?ReturnUrl="+HttpUtility.UrlEncode(Request.Url.PathAndQuery));
}
}
要检查页面是否在同一服务器上:
var redirUrl = HttpUtility.UrlDecode(Request["ReturnUrl"]);
if(!string.IsNullOrWhiteSpace(redirUrl)){
var mappedPath = Page.MapPath(redirUrl.Trim());
if(File.Exists(mappedPath)){
Response.Redirect(redirUrl.Trim());
}
}
您可以将重定向url作为参数添加到登录重定向中,并将其拉入登录后重定向回。
protected void Page_Load(object sender, EventArgs e)
{
if (!ContainsClaim(User.Identity.Name, "role", "admin"))
{
//get current url
string url = HttpContext.Current.Request.Url.AbsoluteUri;
//execute function 1
Response.Redirect("Account/Login.aspx?returnurl=" + url);
}
}
然后,您可以使用以下命令在登录页面上阅读此URL:
string returnurl = Response.QueryString("returnurl")
如果参数不为空,则在登录方法中重定向至该参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.