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

时间:2016-11-26 18:15:25

标签: c# asp.net

我使用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

我遇到的问题是页面是母版页的一部分。当重定向发生在登录页面时,母版页上的任何内容都不起作用。导航链接不会触发,图像会显示断开的链接等。但是当我直接访问登录页面时,母版页中的所有内容都能正常工作。

1 个答案:

答案 0 :(得分:2)

您的重定向网址中有一个额外的正斜杠:

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

您的登录页面仍然正确加载,因为ASP.NET将斜杠视为additional path information的分隔符,类似于问号是查询字符串的分隔符的方式。

但额外的斜杠会导致浏览器解析相对于名为Login.aspx的子目录的链接和图像的相对URL,而不是相对于应用程序的根目录。例如,如果您有图像<img src="Logo.png">,浏览器将尝试加载Login.aspx / Logo.png。删除正斜杠应该可以解决重定向问题:

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

尽管如此,如果手动附加斜杠,访问者仍会收到损坏的网址。要避免这种情况,请使用内置的<asp:HyperLink><asp:Image>服务器控件,这些控件将生成相对URL,并考虑额外的斜杠:

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