繁体   English   中英

在ReturnUrl ASP.NET登录控件中编码哈希

[英]Encode hash in ReturnUrl ASP.NET Login control

我们在aspx中有一个ASP.NET登录控件:

<asp:Login ID="LogOnControl" runat="server" OnLoginError="OnLogOnError" OnLoggedIn="OnLoggedIn">

在OnLoggedIn中,我们执行以下操作:

protected void OnLoggedIn(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
    {
        Response.Redirect(Request.QueryString["ReturnUrl"]);
    }
}

我们的ReturnUrl应该类似于Default.aspx#/Projects

问题在于,所有哈希值都被修剪掉了。 我们需要将整个URL传递到服务器(以某种方式对其进行编码)。

Jabko87-您无法在#之后获取值,因为它没有被发送到服务器。 您必须开发自己的机制来处理它。

比较: 传递带有哈希值的URL以进行重定向

并且: 如何从服务器端获取网址哈希(#)

我通过在aspx页面上定义隐藏的输入来实现它:

<input type="hidden" id='<%= ReturnUrlHash %>' name='<%= ReturnUrlHash %>' />

并用JS填充:

document.getElementById('<%= ReturnUrlHash %>').value = window.location.hash;

在Logon.aspx.cs的服务器端,我做到了:

public const string ReturnUrlHash = "returnUrlHash";
protected void OnLoggedIn(object sender, EventArgs e)
{
    string returnUrl = Request.QueryString["ReturnUrl"];
    if (!string.IsNullOrEmpty(returnUrl))
    {
        if (Request.Form.AllKeys.Contains(ReturnUrlHash))
        {
            returnUrl += Request.Form[ReturnUrlHash];
        }

        Response.Redirect(returnUrl);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM