अनुरोध [अधिकृत] का उपयोग करते समय कॉन्फ़िगर किया गया maxQueryStringLength से अधिक है


122

यहाँ छवि विवरण दर्ज करें
मेरे पास C # में MVC3 साइट है, मेरे पास एक विशेष दृश्य है जिसे जावास्क्रिप्ट फ़ंक्शन से क्वेरी पैरामीटर खिलाया जा रहा है, फ़ंक्शन साइट के माध्यम से रीडायरेक्ट करता है

window.location.href = "../ActionName?" + query_string;

JavaScript फ़ंक्शन द्वारा बनाया गया गतिशील क्वेरी पैरामीटर स्ट्रिंग क्वेरी_string है।

इस विचित्रता का कारण यह है कि कभी-कभी एक ही फ़ंक्शन URL को ASP.Net वेबफॉर्म पर भेज देता है , इसकी वजह यह है कि रिपोर्टव्यूअर कंट्रोल का उपयोग करने के लिए , वैकल्पिक कार्रवाई कुछ मापदंडों को सहेजने के लिए होती है, इस मामले में यह दृश्य को पास करता है। (अगर इसका कोई मतलब नहीं है तो अधिक विस्तृत कर सकते हैं)

जब तक मैं एक्शन विधि में [अधिकृत] परिचय नहीं देता तब तक पूरी बात ठीक है। अगर जगह में है, तो टूट जाता है, बिना ठीक काम करता है, और [अधिकृत] अन्य सभी तरीकों पर ठीक काम करता है।

इस मामले में पूरा URL 966 वर्णों का लंबा है, शोध के बाद ऐसा लगता है कि डिफ़ॉल्ट रूप से maxQueryStringLength मूल्य 2048 है, लेकिन किसी भी प्रकार के पूर्णांक के लिए ओवरराइड किया जा सकता है, इसलिए मैंने केवल दानों के लिए जोड़ा

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

कुंजी के तहत वेब कॉन्फ़िगरेशन फ़ाइल की कुंजी।

वहां कोई खुशी नहीं है, इसलिए मैं हास्यास्पद हो गया और इसे 4096 बना दिया, फिर भी कोई खुशी नहीं हुई।

अब पूरा URL 966 वर्ण लंबा होने के कारण, अधिकृत विशेषता गंभीरता से एक और 1082-3130 वर्ण जोड़ नहीं सकती है, इसलिए मैं यह कैसे निर्धारित कर सकता हूं कि वास्तव में त्रुटि क्या है, या सेटिंग प्रभावी क्यों नहीं हो रही है।

VS2010 प्रो SP1


कृपया आपको प्राप्त होने वाला विस्तृत त्रुटि संदेश जोड़ें।
counsellorben

जवाबों:


70

जब कोई अनधिकृत अनुरोध आता है, तो संपूर्ण अनुरोध URL एनकोडेड होता है, और प्राधिकरण फॉर्म में अनुरोध के लिए क्वेरी स्ट्रिंग के रूप में जोड़ा जाता है, इसलिए मैं देख सकता हूं कि यह आपकी स्थिति को देखते हुए समस्या का कारण बन सकता है।

MSDN के अनुसार, सही तत्व web.config में maxQueryStringLength पुनर्स्थापित करने के लिए संशोधित करने के लिए है <httpRuntime>अंदर तत्व <system.web>तत्व, देख httpRuntime तत्व (ASP.NET सेटिंग्स स्कीमा) । उस तत्व को संशोधित करने का प्रयास करें।


1
काश, इसे सही जगह पर रखने की कोशिश की जाती है, पर्याप्त इंटेलीजेंस को इंटरस्ट करने से मुझे उसी स्थान की चाबी मिल जाती है जिसे मैंने मूल रूप से पोस्ट किया था।
कृपाण

8
यह जानना भी अच्छा है कि इस परम के लिए अधिकतम मूल्य 2097151 है - पहले तो मैंने Int32.MaxValue का उपयोग करने की कोशिश की, लेकिन रनटाइम पर फेंके गए अपवाद ने मुझे 0 और 2097151 के बीच एक मूल्य का उपयोग करने के लिए कहा
टिमडॉग


1
मेरा मानना ​​है कि यद्यपि आप इस परम के लिए अधिकतम मूल्य २० ९ can१५१ पर सेट कर सकते हैं, लेकिन ऐसे अन्य परम हैं जो स्वीकृत अधिकतम क्वेरी लंबाई को प्रभावित करते हैं। मेरे पास इस अधिकतम की तुलना में एक क्वेरी स्ट्रिंग बहुत कम थी जिसे स्वीकार नहीं किया गया था - यह 3,393 वर्ण लंबा था। एक अन्य क्वेरी जो 3,200 वर्णों पर लंबी थी ठीक काम किया।
markthewizard1234

@ markthewizard1234: सहमत: मैं मेरा 2048 से 4096. यह करने के लिए वृद्धि हुई है है कुछ प्रभाव नहीं पड़ा लंबा क्वेरी स्ट्रिंग के लिए 404.something अब प्रकट नहीं होता है के साथ मूल त्रुटि संदेश के रूप में,। लेकिन अब, कोड 400 के साथ एक और त्रुटि संदेश लौटा दिया गया है, यह भी एक लंबी क्वेरी स्ट्रिंग का संकेत है।
या मैपर

213

web.configअपने प्रोजेक्ट के लिए रूट में , system.webनोड के तहत :

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

इसके अलावा, मुझे इसे system.webServerनोड के तहत जोड़ना था या मुझे अपने लंबे क्वेरी स्ट्रिंग के लिए सुरक्षा त्रुटि मिली:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...

1
क्या इसे खोलने से कोई गंभीर सुरक्षा दोष पैदा होता है? 2097151 पर अधिकतम और अधिकतम मूल्य निर्धारित करने में क्या नकारात्मकता है?
ब्रायन

1
ब्रायन, यह एक अच्छा सवाल है - मैं किसी भी सुरक्षा खामी को नहीं देख सकता जब तक कि किसी तरह क्वेरी स्ट्रिंग पर लंबे समय तक कुछ भी नहीं डालना इसके अलावा एक ब्राउज़र सीमा हानिकारक हो सकती है। क्या ब्राउज़र अधिकतम लंबाई क्वेरी स्ट्रिंग इस मूल्य पर पूर्वता लेता है एक और सवाल है जिसका मेरे पास कोई जवाब नहीं है। हालांकि पूछने के लिए धन्यवाद, शायद यहाँ पर कोई व्यक्ति इस पर और अधिक प्रकाश डाल सकता है।
TheJerm

मुझे लगता है कि एक संभावित डॉस भेद्यता है, लेकिन यह इस बात पर निर्भर करता है कि आप वास्तव में अनुरोध को कैसे संभालते हैं। मैं एक अनुरोध में 100 उपयोगकर्ताओं को जोड़ने का प्रयास करते हुए इसमें भाग गया। मैं ऐसा कुछ नहीं करना चाहता।
मार्टिन 16

4
इसने मेरी समस्या को तुरंत हल कर दिया, क्योंकि मैं एक एमवीसी 4 परियोजना पर एक ही मुद्दा रख रहा था। उपरोक्त दोनों को जोड़ने से मेरी त्रुटि हल हो गई। बहुत बहुत धन्यवाद!!
एड डेगेंन

3
4294967295 के अधिकतम मूल्य के साथ बाइटmaxQueryString की लंबाई बाइट्स के रूप में मन और अंत में 0-2097151 की सीमा के साथ वर्णोंmaxQueryStringLength में लंबाई है ।
मंगल

5

किसी और के लिए जो इस समस्या का सामना कर सकता है और यह ऊपर दिए गए विकल्पों में से किसी से भी हल नहीं होता है, मेरे लिए यही काम करता है।

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

मैंने इसे अक्षम कर दिया था क्योंकि हम अपने स्वयं के प्रामाणिक का उपयोग कर रहे थे, लेकिन इससे वही समस्या पैदा हुई और स्वीकृत उत्तर ने किसी भी तरह से मदद नहीं की।


4

मेरे पास datatables.net का उपयोग करके यह त्रुटि है

मैंने तय किया है कि डिफ़ॉल्ट एजिंग में बदलाव करें

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },

मैं डेटाटैबल्स का भी उपयोग कर रहा था, और ऊपर दिए गए सुझावों की असफल कोशिश करने के बाद, इस ट्रिक ने इसे पूरा किया।
ऐडाएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.