2016-07-13 9 views
9

मैंने एक एमवीसी साइट बनाई है और मैं बड़ी संख्या में जेसन फॉर्म डेटा (Content-Type:application/x-www-form-urlencoded) एमवीसी नियंत्रक पर वापस पोस्ट कर रहा हूं। जब मैं ऐसा करता हूं, मुझे 500 प्रतिक्रिया मिलती है जो कहती है: "अमान्यडेटा अपवाद: फॉर्म मान गणना सीमा 1024 पार हो गई।"फ़ॉर्म सबमिट करने के परिणामस्वरूप "अमान्य डेटा एक्सेप्शन: फॉर्म वैल्यू गिनती सीमा 1024 पार हो गई।"

aspnet के पिछले संस्करणों में, आप सीमा बढ़ाने के लिए web.config के लिए निम्न जोड़ना होगा:

<appSettings> 
    <add key="aspnet:MaxHttpCollectionKeys" value="5000" /> 
    <add key="aspnet:MaxJsonDeserializerMembers" value="5000" /> 
</appSettings> 

जब मैं web.config में इन मूल्यों को शब्दों में कहें, मैं किसी भी परिवर्तन नहीं दिख रहा है, तो मुझे लगता है कि माइक्रोसॉफ्ट अब इन मानों को web.config से नहीं पढ़ रहा है। हालांकि, मैं यह नहीं समझ सकता कि इन सेटिंग्स को कहां सेट किया जाना चाहिए।

फॉर्म मूल्य गणना बढ़ाने के साथ कोई भी मदद की सराहना की जाती है!

स्पष्ट है कि, इस अनुरोध को पूरी तरह से ठीक काम करता है जब मेरी पोस्ट डेटा में आइटमों की संख्या कम से कम 1024

+1

'बड़ी मात्रा में जेसन फॉर्म डेटा' से आपका क्या मतलब है? क्या आप डेटा को 'एप्लिकेशन/एक्स-www-form-urlencoded' सामग्री प्रकार या' एप्लिकेशन/जेसन' 'के रूप में पोस्ट कर रहे हैं? –

+0

@ किरण चल्ला मैं सामग्री-प्रकार का उपयोग कर रहा हूं: एप्लिकेशन/एक्स-www-form-urlencoded –

उत्तर

11

आप FormOptions का उपयोग कर डिफ़ॉल्ट formvalue सीमा बदल सकता है। यदि आप एमवीसी का उपयोग कर रहे हैं, तो आप एक फ़िल्टर बना सकते हैं और उस क्रिया पर सजाने के लिए जहां आप इस सीमा को विस्तारित करना चाहते हैं और शेष कार्यों के लिए डिफ़ॉल्ट रखना चाहते हैं।

/// <summary> 
/// Filter to set size limits for request form data 
/// </summary> 
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter 
{ 
    private readonly FormOptions _formOptions; 

    public RequestFormSizeLimitAttribute(int valueCountLimit) 
    { 
     _formOptions = new FormOptions() 
     { 
      ValueCountLimit = valueCountLimit 
     }; 
    } 

    public int Order { get; set; } 

    public void OnAuthorization(AuthorizationFilterContext context) 
    { 
     var features = context.HttpContext.Features; 
     var formFeature = features.Get<IFormFeature>(); 

     if (formFeature == null || formFeature.Form == null) 
     { 
      // Request form has not been read yet, so set the limits 
      features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions)); 
     } 
    } 
} 

कार्रवाई:

[HttpPost] 
[RequestFormSizeLimit(valueCountLimit: 2000)] 
public IActionResult ActionSpecificLimits(YourModel model) 

नोट: अपनी कार्रवाई भी Antiforgery सत्यापन का समर्थन करने की जरूरत है, तो आप फिल्टर ऑर्डर करने के लिए की आवश्यकता होगी। उदाहरण:

// Set the request form size limits *before* the antiforgery token validation filter is executed so that the 
// limits are honored when the antiforgery validation filter tries to read the form. These form size limits 
// only apply to this action. 
[HttpPost] 
[RequestFormSizeLimit(valueCountLimit: 2000, Order = 1)] 
[ValidateAntiForgeryToken(Order = 2)] 
public IActionResult ActionSpecificLimits(YourModel model) 
+0

यह एक आकर्षण की तरह काम करता है। आपको बहुत - बहुत धन्यवाद! –

+0

उपर्युक्त कोड समस्या हल करता है लेकिन मुझे लगता है कि नए एमवीसी कोर में परिवर्तनीय नामों में अद्यतन रहे हैं। "ValueCountLimit" अब "" KeyCountLimit "चर है। मुझे नए संस्करण http://stepbystepschools.net/?p=1044 –

+1

के साथ सही वैरिएबल नामों के साथ उपरोक्त कोड का एक ही प्रकार मिला है, इसे पहले से ही नए संस्करण में लागू किया गया है एएसपीनेट कोर, प्रतिबद्ध देखें: https://github.com/aspnet/Mvc/commit/17f6b17a6dc0e76606b091187a4e43a184656c89 –

संबंधित मुद्दे