ValidateAntiForgeryTokenは、jQueryのAjaxのフォーム送信に失敗します
-
20-09-2019 - |
質問
私は動的にテキストフィールドを追加し、ASP.NET MVCコントローラにjQueryを介して、そのフォームのPOST要求を行うれるHTMLフォームを有する。
私は、コントローラのアクションにValidateAntiForgeryToken属性なしでPOSTリクエストを起動する場合は、、それが正常に動作します。私はアクションにValidateAntiForgeryToken属性を追加する場合でも、私は次の例外を取得します:
の "必要な偽造防止トークンが提供または無効でしたいませんでした。" の
これはあるかもしれない理由を誰どんな考えをしていますか?
音符のワンポイントは、クッキー内のトークンIDの形式でレンダリングトークンに完全に異なるように見えるということです。なぜ、これらは異なる可能性があります?
アクション
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public string MyAction(Guid id, Dto dto)
{
//return JSON;
}
(レンダリングされる)形
<form id="slider" class="fc" method="post" action="/controller/myaction/" name="tabEdit">
<span id="slider_previous" class="sprite" tabindex="0" title="foo">Previous</span>
<input type="hidden" value="mzyg7UWQrHwafoSuoJBvwfraQEtCTAmM9QHYeyMSrAHFHG10BNXM+I2yNgz8zQ8yu/E43eF3yMuHX7YIQwmK3Q==" name="__RequestVerificationToken"/>
<div id="sliderWrap" style="width: 31.243%;">
<ul class="sliderList">
<li id="ID_3d031daf-a7f9-46f2-b4b9-7c9fc6560e3d">
</li>
<li id="ID_78b61634-d88a-4f33-8e48-e0655ad8a958" class="current">
<input class="sliderInput" type="text" value="" name="Bar"/>
<a class="sprite" href="/a/b/78b61634-d88a-4f33-8e48-e0655ad8a958">Delete</a>
</li>
</ul>
</div>
<span id="slider_addNew" class="sprite" tabindex="0" title="Add new">New</span>
<span id="slider_next" class="sprite" tabindex="0" title="See next">Next</span>
</form>
偽造防止トークンをレンダリング元のビューます:
<form id="slider" class="fc" method="post" action="/controller/myaction/" name="tabEdit">
<%=Html.AntiForgeryToken(OurNamespace.MVC.Constants.SaltValue) %>
<ul class="noJs">
<!-- etc -->
</ul>
</form>
解決
あなたはあなたのAntiForgeryTokenを生成するカスタム塩を指定している、あなたはValidateAntiForgeryTokenにこの塩を提供する必要があるだけでなく、属性ます。
[ValidateAntiForgeryToken(Salt=OurNamespace.MVC.Constants.SaltValue)]
所属していません StackOverflow