मैं Membership.create
उपयोगकर्ता फ़ंक्शन का उपयोग कर रहा हूं , फिर निम्न त्रुटि हो रही है,
आवश्यक एंटी-फर्जी फॉर्म फ़ील्ड "__RequestVerificationToken" मौजूद नहीं है
मैं इसे कैसे ठीक करूं?
मैं Membership.create
उपयोगकर्ता फ़ंक्शन का उपयोग कर रहा हूं , फिर निम्न त्रुटि हो रही है,
आवश्यक एंटी-फर्जी फॉर्म फ़ील्ड "__RequestVerificationToken" मौजूद नहीं है
मैं इसे कैसे ठीक करूं?
जवाबों:
आप [ValidateAntiForgeryToken]
अपनी कार्रवाई से पहले विशेषता है। आपको @Html.AntiForgeryToken()
अपने फॉर्म में भी जोड़ना चाहिए ।
Html.AntiForgeryToken();
काम नहीं करता !! @Html.AntiForgeryToken()
कार्यों में बदल रहा है
मेरे मामले में, मेरे पास मेरे web.config में यह था:
<httpCookies requireSSL="true" />
लेकिन मेरा प्रोजेक्ट एसएसएल का उपयोग नहीं करने के लिए सेट किया गया था। उस लाइन के बारे में टिप्पणी करना या एसएसएल का उपयोग करने के लिए परियोजना को हमेशा के लिए हल करना।
IIS
यह बाध्यकारी था ( https » EmptyHostName » IP » 443
) लेकिन इसके लिए कोई बंधन नहीं था ( https » www.mysite.com » IP » 443
)। तो मैं एक साथ बाध्यकारी एक नया जोड़ा गैर खाली होस्ट नाम के लिए https
था कि डोमेन के बराबर और यह समस्या हल हो। मेरे पास फिर IIS
से बाध्य करने के लिए सेटिंग्स http 2 https
हैं।
ऐशे ही:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
...
Code Block
...
}
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<input name="..." type="text" />
// rest
}
यह भी सुनिश्चित करें कि [HttpGet] के तहत [ValidateAntiForgeryToken] का उपयोग न करें।
[HttpGet]
public ActionResult MethodName()
{
..
}
कुकी सक्षम नहीं होने पर भी आपको त्रुटि प्राप्त होगी।
एक और चीज जो इसका कारण बन सकती है (बस इसमें भाग गई) निम्नलिखित है: यदि आप किसी कारण से अपने सभी इनपुट फ़ील्ड को अपने रूप में अक्षम करते हैं। यह छिपे हुए इनपुट फ़ील्ड को अक्षम कर देगा जो आपके सत्यापन टोकन को रखता है। जब फॉर्म वापस पोस्ट किया जाएगा टोकन मूल्य गायब हो जाएगा और यह त्रुटि उत्पन्न करेगा कि यह गायब है। इसलिए आपको जो कार्य करने की आवश्यकता है, वह उस इनपुट फ़ील्ड को पुन: सक्षम करना है जो सत्यापन टोकन रखता है और सब ठीक हो जाएगा।
अनुरोध के एक भाग के रूप में हममें से कुछ लोग फाइलें अपलोड कर रहे हैं। यदि सामग्री की लंबाई अधिक हो गई है <httpRuntime maxRequestLength="size in kilo bytes" />
और आप अनुरोध सत्यापन टोकन का उपयोग कर रहे हैं, तो ब्राउज़र 'The required anti-forgery form field "__RequestVerificationToken" is not present'
अनुरोध लंबाई से अधिक संदेश के बजाय संदेश प्रदर्शित करता है ।
अनुरोध को पूरा करने के लिए बड़े मान के साथ अधिकतम मान को अधिकतम करना
अपने नियंत्रक में सुनिश्चित करें कि आपके पास अपनी http विशेषता है जैसे:
[HttpPost]
नियंत्रक में विशेषता भी जोड़ें:
[ValidateAntiForgeryToken]
आपके विचार पर आपके फ़ॉर्म में आपको लिखना है:
@Html.AntiForgeryToken();
मेरे पास Html.AntiForgeryToken () था; बिना कोड ब्लॉक के @ चिह्न के बिना, यह रेजर में त्रुटि नहीं देता था, लेकिन रनटाइम पर किया था। सुनिश्चित करें कि आप @ Html.Ant के @ चिह्न को देख रहे हैं .. यदि वह गायब है या नहीं
मेरे मामले में, मेरे पास फॉर्म जमा पर यह जावास्क्रिप्ट थी:
$('form').submit(function () {
$('input').prop('disabled', true);
});
यह सबमिट किए जा रहे फॉर्म से छिपे हुए RequestVerificationToken को हटा रहा था। मैंने उसे बदल दिया:
$('form').submit(function () {
$('input[type=submit]').prop('disabled', true);
$('input[type=text]').prop('readonly', true);
$('input[type=password]').prop('readonly', true);
});
... और यह ठीक काम किया।
readonly
और छिपे हुए नियंत्रणों को बाहर कर दिया। अच्छी तरह से काम करने लगता है।
मेरे मामले में कुकीज़ के लिए web.config में गलत डोमेन कारण था:
<httpCookies domain=".wrong.domain.com" />
मेरे मामले में यह webconfig में जोड़ने के कारण था जिसने एंटीफॉरगेरीटोकन requireSSL=true
को httpcookies
काम करना बंद कर दिया था। उदाहरण:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>
दोनों बनाने के लिए requireSSL=true
और @Html.AntiForgeryToken()
काम मैं अंदर इस लाइन जोड़ा Application_BeginRequest
मेंGlobal.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
}
व्यक्तिगत उपयोगकर्ता खातों के साथ ASP.NET के लिए डिफ़ॉल्ट लॉगिन के साथ क्रोम में यह त्रुटि मिली
.cshtml:
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Use a local account to log in.</h4>
नियंत्रक:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
साइट के लिए साइट डेटा साफ़ करके हल:
कई नियंत्रकों पर मेरे EPiServer समाधान में सूचकांक कार्रवाई पर एक ContentOutputCache विशेषता थी जो HttpGet स्वीकार करता है। उन कार्यों के लिए प्रत्येक दृश्य में एक प्रपत्र शामिल था जो एक ही नियंत्रक या एक अलग से एक HttpPost कार्रवाई में पोस्ट कर रहा था। जैसे ही मैंने उन सभी इंडेक्स एक्शन समस्या से उस विशेषता को हटा दिया।
क्योंकि यह इस की पहली खोज के साथ आता है:
मेरे पास यह मुद्दा केवल इंटरनेट एक्सप्लोरर में था और यह पता नहीं लगा सका कि समस्या क्या थी। लंबी कहानी यह टोकन के कुकी हिस्से को नहीं बचा रही थी क्योंकि हमारे (उप) डोमेन में एक अंडरस्कोर था। क्रोम में काम किया है लेकिन IE / Edge इसे पसंद नहीं करते हैं।
यहां अन्य सभी उत्तर भी मान्य हैं, लेकिन यदि उनमें से कोई भी समस्या हल नहीं हुई है, तो यह भी जांचने योग्य है कि वास्तविक हेडर सर्वर में पारित किए जा रहे हैं।
उदाहरण के लिए, nginx के पीछे एक लोड संतुलित वातावरण में, डिफ़ॉल्ट कॉन्फ़िगरेशन सर्वर पर अनुरोध पारित करने से पहले __RequestVerificationToken हैडर को अलग करना है, देखें: सरल नगनेक्स रिवर्स प्रॉक्सी कुछ हेडर को स्ट्रिप करने के लिए लगता है
कभी-कभी आप परिणाम सूची के साथ एक फॉर्म एक्शन विधि लिख रहे हैं। इस स्थिति में, आप एक क्रिया विधि के साथ काम नहीं कर सकते। तो आपके पास एक ही नाम के साथ दो क्रिया विधियाँ होनी चाहिए। एक साथ [HttpGet]
और दूसरा साथ[HttpPost]
विशेषता के ।
अपनी [HttpPost]
कार्य विधि में, सेट करें [ValidateAntiForgeryToken]
विशेषता और @Html.AntiForgeryToken()
अपने html रूप में भी रखें।
मेरे मामले में मुझे AJAX पोस्ट बनाते समय यह त्रुटि हो रही थी, यह पता चला कि कॉल में __RequestVerificationToken मान पार नहीं किया जा रहा था। मुझे मैन्युअल रूप से इस फ़ील्ड का मान ढूंढना था और इसे उस डेटा ऑब्जेक्ट पर एक संपत्ति के रूप में सेट करना होगा जो समापन बिंदु पर भेजा गया है।
अर्थात
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
एचटीएमएल
<form id="myForm">
@Html.AntiForgeryToken()
<!-- other input fields -->
<input type="submit" class="submitButton" value="Submit" />
</form>
जावास्क्रिप्ट
$(document).on('click', '#myForm .submitButton', function () {
var myData = { ... };
myData.__RequestVerificationToken = $('#myForm input[name="__RequestVerificationToken"]').val();
$.ajax({
type: 'POST',
url: myUrl,
data: myData,
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
dataType: 'json',
success: function (response) {
alert('Form submitted');
},
error: function (e) {
console.error('Error submitting form', e);
alert('Error submitting form');
},
});
return false; //prevent form reload
});
नियंत्रक
[HttpPost]
[Route("myUrl")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> MyUrlAsync(MyDto dto)
{
...
}
public class MyDto { public bool Whatever { get; set; } }
मैं मुझे साझा करना चाहते हैं, मैं इस विरोधी जालसाजी ट्यूटोरियल
का उपयोग कर रहा हूँ asp.net mvc 4 को कोणीयज के साथ उपयोग करते हुए, लेकिन यह एक अपवाद को फेंकता है जो मैं $ http.post का उपयोग करके अनुरोध करता हूं और मुझे लगा कि समाधान सिर्फ X- जोड़ रहा है
अनुरोधित-साथ ':' XMLHttpRequest ' $ $ http.post के हेडर के लिए, क्योंकि ऐसा लगता है कि (filterContext.HttpContext.Request.IsAjaxRequest())
इसे अजाक्स के रूप में मान्यता नहीं है और यहां मेरा उदाहरण कोड है।
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)
{
....