2

ReturnUrlクエリ文字列をログインページに渡そうとしています。私は部分的なログインビュー(ログインボックスのようなもの)とログインビューを持っています。今、私は私の部分図に以下の行を持っている:私は私のログインページにリダイレクトされますよASP.NET MVCのreturnUrlクエリ文字列をエンコードする

using (Html.BeginForm("Login" 
        , "Account" 
        , new { returnUrl=HttpUtility.UrlEncode(
             Request.QueryString["ReturnUrl"]) 
             ?? HttpUtility.UrlEncode(Request.Path) 
          } 
        , FormMethod.Post)) 

私は、私の部分図のsubmitボタン(例えばから http://localhost:12345/Product/1234/Product1)をクリックすると、次のURL:

http://localhost:12345/Account/Login?returnUrl=%2FProduct%2F1234%2FProduct1 

しかし、私はログオンした場合、ページが

に戻っているので、私は、HTTP 400応答が表示されます。

また、間違った資格情報を入力すると、returnUrlクエリ文字列が再びエンコードされるため、%文字はすべて%25に再度変換されます。私は手動で

(符号化なし)

http://localhost:12345/Account/Login?returnUrl=/Product/1234/Product1

を入力してログインした場合、私は言及する必要があります

、私が正常に指定したパスにリダイレクトしています。

私は何かが分かりません。しかし、何が見つかりませんでした。

ありがとうございました。

+1

は自動的にエンコードされますか?自分でエンコードする必要はありません。 –

答えて

3

あなたはただ、生成された<form>要素のaction属性に値を割り当てるときに、それがTagBuilderによってコードされているとして、それをコードせずに値を使用Html.BeginForm()に渡したときに、それをエンコードする必要はありません

@using(Html.BeginForm(
    "Login", 
    "Account", 
    new { returnUrl= Request.QueryString["ReturnUrl"] }, 
    FormMethod.Post)) { 

    @* form here *@  
} 

ReturnUrlがnullの場合は、action属性に割り当てられた生成されたURLには関係ありません(ルーティングでオプションのパラメータと仮定しているため、null合体演算子とRequest.Pathも削除されています。 ViewModel)。

relevant source code in TagBuilderあなたはあなたのリターンのURLのエンコーディングを避けるために、これを使用することもできます(コメント鉱山)

private void AppendAttributes(StringBuilder sb) { 
    foreach (var attribute in Attributes) { 
     string key = attribute.Key; 
     if (String.Equals(key, "id", StringComparison.Ordinal /* case-sensitive */) && String.IsNullOrEmpty(attribute.Value)) { 
      continue; // DevDiv Bugs #227595: don't output empty IDs 
     } 

     // --------------------------------------- 
     // Value will be HTML attribute encoded by 
     // the Encoder set for the application 
     // --------------------------------------- 
     string value = HttpUtility.HtmlAttributeEncode(attribute.Value); 
     sb.Append(' ') 
      .Append(key) 
      .Append("=\"") 
      .Append(value) 
      .Append('"'); 
    } 
} 
2

です:

@Html.Raw([Your Return Url]) 

は、この情報がお役に立てば幸い!

マット

関連する問題