簡體   English   中英

具有母版頁的HttpContext.Current.Request.Url.AbsolutePath

[英]HttpContext.Current.Request.Url.AbsolutePath with Master Page

我正在使用HttpContext.Current.Request.Url.AbsolutePath作為我的安全性的一部分,用戶在訪問某些頁面之前需要登錄。

在此示例中,效果很好。 用戶必須先登錄才能查看其個人資料。

        if (Session["UserID"] == null)
        {
            Response.Redirect("Login.aspx/?ReturnURL=" + HttpContext.Current.Request.Url.AbsolutePath);
        }

最終結果如下所示:

http://localhost:54324/Login.aspx/?ReturnURL=/Profile_Page.aspx

我遇到的問題是頁面是母版頁的一部分。 當重定向發生到登錄頁面時,母版頁上的所有內容均不起作用。 導航鏈接不會觸發,圖像顯示斷開的鏈接等。但是,當我直接訪問登錄頁面時,母版頁中的所有內容都可以正常工作。

您的重定向URL中有一個額外的正斜杠:

Response.Redirect("Login.aspx/?ReturnURL=" + HttpContext.Current.Request.Url.AbsolutePath);
                             ^

您的登錄頁面仍然可以正確加載,因為ASP.NET將斜杠視為其他路徑信息的分隔符,類似於問號是查詢字符串的分隔符的方式。

但是,額外的斜杠會導致瀏覽器解析相對於名為Login.aspx的子目錄而不是相對於應用程序根目錄的鏈接和圖像的相對URL。 例如,如果您有圖像<img src="Logo.png"> ,則瀏覽器將嘗試加載Login.aspx / Logo.png。 刪除正斜杠應該可以解決重定向問題:

Response.Redirect("Login.aspx?ReturnURL=" + Request.Url.AbsolutePath);

但是,如果訪客手動添加斜杠,URL仍然會損壞。 為避免這種情況,請使用內置的<asp:HyperLink><asp:Image>服務器控件,它們將生成考慮了額外斜杠的相對URL:

<asp:HyperLink runat="server" NavigateUrl="~/About.aspx" Text="About Us" />
<asp:Image runat="server" ImageUrl="Logo.png" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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