简体   繁体   English

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

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

We have a ASP.NET login control in our aspx: 我们在aspx中有一个ASP.NET登录控件:

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

and in OnLoggedIn we do: 在OnLoggedIn中,我们执行以下操作:

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

and our ReturnUrl should be something like Default.aspx#/Projects 我们的ReturnUrl应该类似于Default.aspx#/Projects

The problem is that all after hash is trimmed. 问题在于,所有哈希值都被修剪掉了。 We need to pass entire URL to server (so encode it somehow). 我们需要将整个URL传递到服务器(以某种方式对其进行编码)。

Jabko87 - you cannot get values after # because it is not being sent to the server. Jabko87-您无法在#之后获取值,因为它没有被发送到服务器。 You must develop your own mechanism to handle it. 您必须开发自己的机制来处理它。

Compare: Pass URL's with hash value for redirection 比较: 传递带有哈希值的URL以进行重定向

And: How to get Url Hash (#) from server side 并且: 如何从服务器端获取网址哈希(#)

I achieved it by defining hidden input on aspx page: 我通过在aspx页面上定义隐藏的输入来实现它:

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

and filling it with JS: 并用JS填充:

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

and on server side in Logon.aspx.cs I did: 在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