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