我在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;
}
工资单用户在登录前点击了工资核算页面。因此,她被重定向到登录页面。登录后如何自动将它们引导回工资单页面?
答案 0 :(得分:1)
有几种选择。
您可以使用returnUrl的查询参数,您可以在登录时使用该参数进行重定向。如果您确实使用了查询参数,请确保在重定向之前将returnUrl实际设置为您网站上的网址;否则黑客可能会使用您的页面让用户访问恶意网站。
另一个选择是使用会话(如果可用)来存储有关用户尝试访问的内容以及从会话变量重定向的信息。
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());
}
}
答案 1 :(得分:0)
您可以将重定向网址作为参数添加到登录重定向中,并在登录后将其重定向回来。
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);
}
}
然后,您可以在登录页面上阅读此网址:
string returnurl = Response.QueryString("returnurl")
如果参数不为空,则在登录方法中重定向到它。