我已经实现了我的登录页面,它工作正常,但我无法从保存原始请求的URL的ReturnUrl
查询字符串参数中读取。
例如,从此页面成功登录后:
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>
答案 0 :(得分:2)
如果我说得对,你在登录后试图获得ReturnUrl
?请在button_click
中尝试以下操作。它应该工作。您的推荐人显示您已经发出另一个请求而丢失了查询字符串部分而未捕获它
string ReturnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(ReturnUrl);
如果您在意,请在button_click
答案 1 :(得分:2)
在Page_Load事件&amp;上检索QueryString参数。将其保存在
中ViewState["ReturnUrl"] = Request.QueryString["ReturnUrl"];
然后,在按钮单击事件中执行身份验证重定向:
Response.Redirect(ViewState["ReturnUrl"].ToString());
答案 2 :(得分:1)
我正在登录页面上的按钮事件中阅读它。它是一样的 页面我不知道为什么会发生这种情况
提交登录按钮时,form
并未保留querystring
,因此它会显示在UrlReferrer中。
将查询字符串保存到会话变量或将查询字符串附加到form
action
属性。