سؤال

لدي نموذج HTML ، أقوم بإضافة حقل نص ديناميكي وأداء طلب نشر لهذا النموذج عبر jQuery إلى وحدة تحكم ASP.NET MVC.

إذا استدعت طلب النشر بدون سمة ValidateanTiforgeryToken على إجراء وحدة التحكم ، فهو يعمل بشكل جيد. ولكن ، عندما أضيف سمة ValidateanTiforgeryToken إلى الإجراء ، أحصل على الاستثناء التالي:

"لم يتم تزويد رمز مطلوب مضاد للانهيار أو كان غير صالح."

هل أي شخص أي أفكار حول سبب هذا؟

إحدى نقاط الملاحظة هي أن معرف الرمز المميز في ملف تعريف الارتباط يبدو أنه مختلف تمامًا عن الرمز المميز المقدم في النموذج. لماذا قد تكون هذه مختلفة؟

الحدث:

[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>
هل كانت مفيدة؟

المحلول

أنت تحدد ملحًا مخصصًا عند إنشاء مضادات الأمواج الخاصة بك ، تحتاج إلى توفير هذا الملح إلى سمة ValityTiforgeryToken أيضًا.

[ValidateAntiForgeryToken(Salt=OurNamespace.MVC.Constants.SaltValue)]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top