Saya menggunakan Membership.create
fungsi pengguna, maka kesalahan berikut terjadi,
Bidang formulir anti-pemalsuan yang diperlukan "__RequestVerificationToken" tidak ada
Bagaimana saya bisa memperbaikinya?
asp.net-mvc-4
asp.net-membership
Hemant Soni
sumber
sumber
Html.AntiForgeryToken();
tidak bekerja !! Berubah menjadi@Html.AntiForgeryToken()
karyaDalam kasus saya, saya memiliki ini di web.config saya:
<httpCookies requireSSL="true" />
Tetapi proyek saya ditetapkan untuk tidak menggunakan SSL. Mengomentari garis itu atau mengatur proyek untuk selalu menggunakan SSL menyelesaikannya.
sumber
IIS
sini ada pengikatan (https » EmptyHostName » IP » 443
) tetapi tidak ada pengikatan untuk (https » www.mysite.com » IP » 443
). Jadi saya menambahkan ikatan baru dengan nama host yang tidak kosong untukhttps
itu sama dengan domain dan itu memecahkan masalah. Saya memiliki pengaturan ulangIIS
untuk memaksahttp 2 https
juga.Seperti ini:
Pengendali
Pandangan:
sumber
Pastikan juga untuk tidak menggunakan [ValidateAntiForgeryToken] di bawah [HttpGet].
sumber
Anda akan menerima kesalahan bahkan ketika Cookie tidak diaktifkan.
sumber
Hal lain yang dapat menyebabkan ini (hanya berlari ke ini) adalah sebagai berikut: jika Anda karena suatu alasan menonaktifkan semua bidang input Anda di formulir Anda. itu akan menonaktifkan bidang input tersembunyi yang menyimpan token verifikasi Anda. ketika formulir akan diposting kembali nilai token akan hilang dan akan menghasilkan kesalahan yang hilang. jadi yang perlu Anda lakukan adalah mengaktifkan kembali bidang input yang menyimpan token verifikasi dan semuanya akan baik-baik saja.
sumber
Kemungkinan lain bagi kita yang mengunggah file sebagai bagian dari permintaan. Jika panjang konten melebihi
<httpRuntime maxRequestLength="size in kilo bytes" />
dan Anda menggunakan token verifikasi permintaan, browser menampilkan'The required anti-forgery form field "__RequestVerificationToken" is not present'
pesan alih-alih panjang permintaan melebihi pesan.Mengatur maxRequestLength ke nilai yang cukup besar untuk memenuhi permintaan menyembuhkan masalah langsung - meskipun saya akui itu bukan solusi yang tepat (kami ingin pengguna tahu masalah sebenarnya dari ukuran file, bukan dari token verifikasi permintaan yang hilang).
sumber
Pastikan di controller Anda bahwa Anda memiliki atribut http seperti:
juga tambahkan atribut di controller:
Dalam formulir Anda pada pandangan Anda, Anda harus menulis:
Saya memiliki Html.AntiForgeryToken (); tanpa tanda @ saat berada di blok kode, itu tidak memberikan kesalahan dalam Razor tetapi lakukan saat runtime. Pastikan Anda melihat tanda @ dari @ Html. Tidak .. apakah ada yang hilang atau tidak
sumber
Dalam kasus saya, saya punya javascript ini pada formulir kirim:
Ini menghapus RequestVerificationToken yang disembunyikan dari formulir yang dikirimkan. Saya mengubahnya menjadi:
... dan itu bekerja dengan baik.
sumber
readonly
dan mengecualikan kontrol tersembunyi. Tampaknya bekerja dengan baik.Jika ada yang mengalami kesalahan karena alasan yang sama mengapa saya mengalaminya, inilah solusi saya:
jika kamu punya
Html.AntiForgeryToken();
ubah ke
@Html.AntiForgeryToken()
sumber
Dalam kasus saya, domain yang salah di web.config untuk cookie adalah alasannya:
sumber
Dalam kasus saya itu karena menambahkan
requireSSL=true
untukhttpcookies
di webconfig yang membuat AntiForgeryToken berhenti kerja. Contoh:Untuk membuat keduanya
requireSSL=true
dan@Html.AntiForgeryToken()
berfungsi saya menambahkan baris ini diApplication_BeginRequest
dalamGlobal.asax
sumber
Mendapat kesalahan ini di Chrome dengan login default untuk ASP.NET dengan Akun Pengguna Individual
.cshtml:
Pengendali:
Dipecahkan dengan menghapus data situs untuk situs:
sumber
Dalam solusi EPiServer saya pada beberapa pengontrol ada atribut ContentOutputCache pada tindakan Indeks yang menerima HttpGet. Setiap tampilan untuk tindakan tersebut berisi formulir yang memposting ke tindakan HttpPost ke controller yang sama atau ke yang berbeda. Segera setelah saya menghapus atribut itu dari semua masalah tindakan Indeks itu hilang.
sumber
Karena ini muncul dengan pencarian pertama ini:
Saya memiliki masalah ini hanya di Internet Explorer dan tidak bisa mengetahui apa masalahnya. Singkatnya cerita itu tidak menyimpan bagian cookie dari Token karena (sub) domain kami memiliki garis bawah di dalamnya. Bekerja di Chrome tetapi IE / Edge tidak menyukainya.
sumber
Semua jawaban lain di sini juga valid, tetapi jika tidak ada satu pun dari mereka menyelesaikan masalah, patut juga memeriksa bahwa tajuk yang sebenarnya diteruskan ke server.
Misalnya, dalam lingkungan yang seimbang beban di belakang nginx, konfigurasi default adalah untuk menghapus header __RequestVerificationToken sebelum meneruskan permintaan ke server, lihat: sederhana proxy reverse nginx tampaknya menghapus beberapa header.
sumber
Kadang-kadang Anda menulis metode tindakan formulir dengan daftar hasil. Dalam hal ini, Anda tidak dapat bekerja dengan satu metode tindakan. Jadi, Anda harus memiliki dua metode tindakan dengan nama yang sama. Satu
[HttpGet]
dengan[HttpPost]
atribut lainnya.Dalam
[HttpPost]
metode tindakan Anda , atur[ValidateAntiForgeryToken]
atribut dan juga masukkan@Html.AntiForgeryToken()
dalam bentuk html Anda.sumber
Dalam kasus saya, saya mendapatkan kesalahan ini saat membuat posting AJAX, ternyata nilai __RequestVerificationToken tidak diteruskan dalam panggilan. Saya harus secara manual menemukan nilai bidang ini dan menetapkan ini sebagai properti pada objek data yang dikirim ke titik akhir.
yaitu
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
Contoh
HTML
Javascript
Pengendali
sumber
public class MyDto { public bool Whatever { get; set; } }
saya ingin berbagi milik saya, saya telah mengikuti tutorial anti forgerytoken ini menggunakan asp.net mvc 4 dengan angularjs, tetapi ia melempar pengecualian setiap kali saya meminta menggunakan $ http.post dan saya menemukan solusinya hanya menambahkan 'X- Diminta-Dengan ':' XMLHttpRequest ' ke header $ http.post, karena sepertinya
(filterContext.HttpContext.Request.IsAjaxRequest())
tidak mengenalinya sebagai ajax dan di sini adalah contoh kode saya.App.js
var headers = { 'X-Requested-With': 'XMLHttpRequest', 'RequestVerificationToken': $scope.token, 'Content-Type': 'application/json; charset=utf-8;' };
$http({ method: 'POST', url: baseURL + 'Save/User', data: JSON.stringify($scope.formData), headers: headers }).then(function (values) { alert(values.data); }).catch(function (err) { console.log(err.data); });
SaveController
[HttpPost] [MyValidateAntiForgeryToken] public ActionResult User(UserModel usermodel) { ....
sumber