以下のコードを適用してReturnUrlにリダイレクトしようとしていたasp.net mvc 5アプリケーションを開発しています。
[HttpPost]
[AllowAnonymous]
public ActionResult Login(UserLogin model, string returnUrl)
{
if (ModelState.IsValid)
{
string EncryptedPassword = GetMD5(model.Password);
if (DataAccess.DAL.UserIsValid(model.Username, EncryptedPassword))
{
FormsAuthentication.SetAuthCookie(model.Username, true);
if (String.IsNullOrEmpty(returnUrl))
{
return RedirectToAction("Index", "Home");
}
else
{
Response.Redirect(returnUrl);
}
}
else
{
ModelState.AddModelError("", "Invalid Username or Password");
}
}
return View();
}
上記のコードは正常に機能していますが、問題は、ログインフォームを投稿すると、以前に直面したことのない例外が発生し、Login.cshtmlのビューで生成されている例外を解決するのが難しいことです、ラインで:
@Html.AntiForgeryToken()
そして、それがスローする例外:
HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません。
私は多くのことを研究しましたが、結論に達することができません。 @ Html.AntiForgeryToken()行を削除するとアプリケーションは正常に動作しますが、これを行いたくないので、クロスサイトリクエストを保護したままにしておきたいです。
誰でも私を助けてください、この例外を取り除くにはどうすればよいですか?
Response.Redirect(anyUrl)
の場合、ステータスコードは302に設定され、ヘッダーが応答に追加されます。
_HTTP 1.0 302 Object Moved
Location: http://anyurl.com
_
そして、ViewResult
が実行され、かみそりがビューをレンダリングすると、Html.AntiForgeryToken()
が呼び出されるので、ヘルパーはヘッダー_X-Frame-Options
_といくつかのCookieを応答に追加しようとします。例外の。
ただし、_X-Frame-Options
_ヘッダーの追加を抑制できるので、この_AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
_を_Application_start
_に入れるだけでかまいません。
ただし、これを変更することをお勧めします。
_Response.Redirect(returnUrl);
_
に
_return Redirect(returnUrl);
_
注
.NETコードが開かれたので、AntiForgeryToken
がどのように機能するかを見ることができます。ここを参照してください AntiForgeryWorker 。
Response.Redirect(returnUrl)
で同じエラーが発生していました。 Response.Redirect(returnUrl, false)
に変更した後、問題を修正しました。