2

したがって、許可されたユーザーのみに許可されるアクションがあります。

[HttpPost]
[Authorize]
public ActionResult DoSomething(string data)
{
    StoreData(data);
    return RedirectToAction("Index", "Home");
}

ビューでは、このアクションを次のように呼び出します。

@using (Html.BeginForm("DoSomething", "Home"))
{
    @Html.Hidden("data", "12345")
    <input type="submit" value="DoIt" /> 
}

ユーザーが承認されていない場合、ユーザーはログイン ページにリダイレクトされますが、ReturnUrl にはクエリ文字列 (この場合は「データ」の値) が含まれていません。

http://localhost:62978/Account/Login?ReturnUrl=%2fHome%2fDoSomething

それはなぜですか、それを修正できますか?

4

1 に答える 1

0

HTML フォームのメソッドが POST の場合、フォーム データは HTTP リクエストの本文で送信されます。ただし、フォームのメソッドが GET の場合、フォーム データは HTTP リクエストの URL の一部として送信されます。

BeginFormは、デフォルトで を含むフォームをレンダリングしますmethod="Post"。フォームのメソッドを明示的に に設定する必要がありますFormMethod.Get。例:

@using (Html.BeginForm("DoSomething", "Home", FormMethod.Get))

または、フォームを表示する前にユーザー認証を要求します。つまり、ビューをレンダリングするアクションに Authorize 属性を追加します。例:

[Authorize]
public ActionResult DoSomething()
{
    View();
}
于 2013-09-15T06:32:54.260 に答える