C# 重定向到登录后重定向回位置

C# 重定向到登录后重定向回位置,c#,asp.net,webforms,asp.net-identity-2,C#,Asp.net,Webforms,Asp.net Identity 2,我在一个ASP.NET4.6WebForms应用程序中 我试图使用索赔检查用户是否有权访问工资单页面,如下所示: protected void Page_Load(object sender, EventArgs e) { if (!ContainsClaim(User.Identity.Name, "role", "admin")) { //execute function 1 Response.R

我在一个ASP.NET4.6WebForms应用程序中

我试图使用索赔检查用户是否有权访问工资单页面,如下所示:

    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")
如果参数不是空的,则在您的登录方法中重定向到它。

I如果您要使用“正常”的身份验证用户检测,则aspnet会将您重定向到登录页面,并将上一页作为
returnUrl
querystring参数。但是您可以自己将其添加到重定向中,在登录后检查并重定向用户。