C# 在ReturnUrl ASP.NET登录控件中编码哈希
我们的aspx中有一个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-您无法在之后获取值,因为它没有被发送到服务器。你必须建立
<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);
}
}