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"

なぜこれが起こるのですか?

回答ありがとうございますが、この特定のWebサイトではSession Stateを使用していないため、オプションではありません。ユーザーが初めてログインページにリダイレクトされたとき(制限されたページにアクセスした後)、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

ログインページのボタンイベントで読んでいます。同じページにあるのになぜこれが起こっているのかわかりません

ログインボタンが送信されたときは、UrlReferrerに表示されるため、保存formされていません。querystring

クエリ文字列をセッション変数に保存するか、クエリ文字列をform action属性に追加します。

于 2012-11-20T11:29:16.210 に答える