2

我已经实现了我的登录页面,它工作正常,但我无法从ReturnUrl包含原始请求 URL 的查询字符串参数中读取。

例如,从该页面成功登录时:

http://whatever/Login.aspx?ReturnUrl=%2fAdmin%2fmenu-link.aspx

我得到以下信息:

Context.Request.QueryString["ReturnUrl"] = null 
Context.Request.Params["ReturnUrl"] = null
Context.Request.Url.ToString() = "http://localhost/Login.aspx"
UrlReferrer = "http://localhost/Login.aspx?ReturnUrl=/Admin/menu-link.aspx"

为什么会这样?

感谢您的回答,但我不在这个特定网站上使用会话状态,所以它不是我的选择。用户第一次被重定向到登录页面(访问受限页面后),我可以正确地看到 page_load 中的查询字符串,但是它在回发时丢失了。

这是我的页面代码,我不知道为什么它没有持续存在:

<body>
    <form id="form1" action="Login.aspx" runat="server" defaultbutton="btnLogin">
    //Bunch of html
    <asp:Button TabIndex="5" CausesValidation="true" runat="server" ID="btnLogin" Text="Log In" onclick="btnLogin_Click" /></div>
    </div>
    </form>
</body>
4

3 回答 3

2

如果我没听错,您是ReturnUrl在登录后尝试获取吗?在您的button_click. 它应该可以工作。您的推荐人显示您已经提出另一个请求,丢失了查询字符串部分而没有捕获它

string ReturnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(ReturnUrl);

如果您关心,请在您的button_click

于 2012-11-20T11:36:11.147 回答
2

在 Page_Load 事件中检索 QueryString 参数并将其保存在

ViewState["ReturnUrl"] = Request.QueryString["ReturnUrl"];

然后,在按钮单击事件中进行身份验证重定向:

Response.Redirect(ViewState["ReturnUrl"].ToString());
于 2012-11-20T11:39:35.090 回答
1

我正在登录页面上的按钮事件中阅读它。它在同一页上 我不知道为什么会这样

form没有保留querystring提交登录按钮的时间,因此它出现在 UrlReferrer 中。

将查询字符串保存到会话变量或将查询字符串附加到form action属性。

于 2012-11-20T11:29:16.210 回答