[英]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传递到服务器(以某种方式对其进行编码)。
我通过在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.