[英]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.