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

C# 在ReturnUrl ASP.NET登录控件中编码哈希,c#,asp.net,login,C#,Asp.net,Login,我们的aspx中有一个ASP.NET登录控件: <asp:Login ID="LogOnControl" runat="server" OnLoginError="OnLogOnError" OnLoggedIn="OnLoggedIn"> 我们的ReturnUrl应该类似于Default.aspx/Projects 问题是所有的hash都被修剪了。我们需要将整个URL传递给服务器,以便以某种方式对其进行编码。Jabko87-您无法在之后获取值,因为它没有被发送到服务器。你必须建立

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

<asp:Login ID="LogOnControl" runat="server" OnLoginError="OnLogOnError" OnLoggedIn="OnLoggedIn">
我们的ReturnUrl应该类似于Default.aspx/Projects


问题是所有的hash都被修剪了。我们需要将整个URL传递给服务器,以便以某种方式对其进行编码。

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

比较:


而且:

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

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

您尝试过:HttpUtility.UrlEncode吗?是的,可能会有帮助,但在哪种情况下我应该对其进行编码?在它被发送到服务器的那一刻,我想我似乎找到了一个解决方案,我把隐藏的输入放在aspx中保存window.location.hash,在服务器上它作为POST参数,我把它附加到我重定向的URL中,似乎工作得很好,这正是我开发自己机制的意思:很高兴你做到了;谢谢你带我去;
<input type="hidden" id='<%= ReturnUrlHash %>' name='<%= ReturnUrlHash %>' />
document.getElementById('<%= ReturnUrlHash %>').value = window.location.hash;
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);
    }
}