簡體   English   中英

在ReturnUrl ASP.NET登錄控件中編碼哈希

[英]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傳遞到服務器(以某種方式對其進行編碼)。

Jabko87-您無法在#之后獲取值,因為它沒有被發送到服務器。 您必須開發自己的機制來處理它。

比較: 傳遞帶有哈希值的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM