URL को अप्रत्याशित रूप से समाप्त करने के लिए अनुरोध प्रारूप अप्राप्त है


283

यह एक प्रश्न नहीं है - इसे संदर्भ के लिए यहां पोस्ट किया जा रहा है:

WebService का उपभोग करते समय, मुझे निम्नलिखित त्रुटि मिली:

अनुरोध प्रारूप अप्रत्याशित रूप से / myMethodName URL को समाप्त करने के लिए पहचाना नहीं गया है


4
Google के लिए इसे आसान बनाने के लिए, त्रुटि संदेश का जर्मन अनुवाद " Unbekanntes Anforderungsformat für eine URL, die unerwartet mit '/ _myMethodName' endet " पढ़ता है
उवे कीम

और चीनी अनुवाद: " 無法 辨認 Chinese , 未 未 URL 預期 translation " 以 N / myMethodName 結束。 "
इग्नाटियस

जवाबों:


515

इस वेबसाइट पर एक समाधान मिला

आपको बस अपने web.config में निम्नलिखित जोड़ना है

<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</configuration>

Microsoft से अधिक जानकारी


3
मुझे लगता है कि तुम सब करने की ज़रूरत है स्विच <system.web> से <system.webserver>
roman m

मैंने इसे वैसे ही रखा है और अब के लिए त्रुटि दूर हो गई लगती है। अगर मुझे फिर से त्रुटि दिखाई देती है तो मैं वेबसर्वर सेक्शन में webservices configs को स्थानांतरित कर दूँगा।
डैनियल ब्रिंक

1
और अगर इस त्रुटि को बिना किसी नियमितता के, केवल कभी-कभी फेंक दिया जाए तो क्या होगा? क्या ऐसे कॉल कुछ क्लाइंट / ब्राउज़र कॉन्फ़िगरेशन पर निर्भर हैं !?
व्लादिस्लाव

2
IIS8 के साथ एक Win2012srv पर इसकी आवश्यकता थी। IIS8 के साथ Win8 पर इसकी आवश्यकता नहीं थी। कॉन्फ़िगरेशन में कोई अन्य विसंगतियां जो मुझे नहीं पता हैं।
लॉसमनोस

1
@ सौरभराय मुझे भी। यह क्या किया? उत्तर में दिए गए लिंक टूट गए हैं।
रॉड

18

मेरे द्वारा पाई गई सभी जानकारी के 90% होने के बावजूद (इस त्रुटि का समाधान खोजने की कोशिश करते हुए) मुझे HttpGetऔर HttpPostकॉन्फ़िगरेशन को जोड़ने के लिए कहा, यह मेरे लिए काम नहीं किया ... और वैसे भी मेरे लिए कोई मतलब नहीं था।

मेरा एप्लिकेशन बहुत सारे सर्वर (30+) पर चल रहा है और मुझे उनमें से किसी के लिए भी इस कॉन्फ़िगरेशन को कभी नहीं जोड़ना है। या तो .NET 2.0 या .NET 4.0 के तहत चलने वाले एप्लिकेशन का संस्करण।

मेरे लिए समाधान IIS के खिलाफ ASP.NET को फिर से पंजीकृत करना था।

मैंने इसे प्राप्त करने के लिए निम्न कमांड लाइन का उपयोग किया है ...

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

इससे मेरा मुद्दा ठीक हो गया। मुझे ओपी के रूप में एक ही त्रुटि मिल रही थी; जो पहले काम करने वाली साइट थी। किसी को सक्षम किया गया। विंडोज़ सुविधाओं (असंबंधित कारणों से) के माध्यम से .NET 3.5 को सक्षम किया जिसने मेरी साइट को तोड़ दिया। aspnet_regiis -iहालांकि यह तय है।
नैट

16

सुनिश्चित करें कि आप सही विधि का उपयोग कर रहे हैं: पोस्ट / प्राप्त करें, सही सामग्री प्रकार और सही पैरामीटर (डेटा)।

$.ajax({
    type: "POST",
    url: "/ajax.asmx/GetNews",
    data: "{Lang:'tr'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { generateNews(msg); }
})

1
मेरे पैरामीटर वैल्यू पासिंग को डेटाटाइप, और लापता मानों के कारण समस्या मिली, जो 500 त्रुटि में समाप्त होती है। अब यह हल है।
प्राणेश जनार्दन

ऐड content-type: application/jsonभी मेरे लिए इस समस्या का समाधान।
डेल्फी.बॉय

10

उत्तम।

केस 2 - जहां मेरे मामले में वही समस्या उत्पन्न हो सकती है) निम्नलिखित लाइन के कारण समस्या थी:

<webServices>
  <protocols>
    <remove name="Documentation"/>
  </protocols>
</webServices>

यह सर्वर में अच्छी तरह से काम करता है क्योंकि कॉल सीधे webservice फ़ंक्शन पर किए जाते हैं - हालाँकि, यदि आप डिबग वातावरण में .Net पर सीधे सेवा चलाते हैं और फंक्शन को मैन्युअल रूप से चलाना चाहते हैं तो यह विफल हो जाएगा।


उस तर्क को web.config में जोड़ा गया। परिभाषा को .asmx सेवा में ब्राउज़ करने से परिभाषा को रोकने के लिए। जाहिर है कि ActiveReports तोड़ दिया। यह जानने की खुशी है कि यह स्थानीय रूप से परीक्षण का एक लक्षण है और यह सर्वर पर काम करेगा। धन्यवाद।
याकूब बार्न्स

2

रिकॉर्ड के लिए मुझे यह त्रुटि मिल रही थी जब मैंने एक पुराने ऐप को एक सर्वर से दूसरे सर्वर पर स्थानांतरित कर दिया। मैंने जोड़ा<add name="HttpGet"/> <add name="HttpPost"/> web.config में तत्वों को , जिन्होंने इस त्रुटि को बदल दिया है:

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at BitMeter2.DataBuffer.incrementCurrent(Int64 val)
   at BitMeter2.DataBuffer.WindOn(Int64 count, Int64 amount)
   at BitMeter2.DataHistory.windOnBuffer(DataBuffer buffer, Int64 totalAmount, Int32 increments)
   at BitMeter2.DataHistory.NewData(Int64 downloadValue, Int64 uploadValue)
   at BitMeter2.frmMain.tickProcessing(Boolean fromTimerEvent)

इस त्रुटि को ठीक करने के लिए मुझे ScriptHandlerFactory लाइनों को web.config में जोड़ना पड़ा:

  <system.webServer>
    <handlers>
      <remove name="ScriptHandlerFactory" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
  </system.webServer>

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


1

इस समस्या को ठीक करने के लिए मैं निम्नलिखित लाइन ऑफ कोड का उपयोग करता हूं। निम्नलिखित कोड web.config फ़ाइल में लिखें

<configuration>
    <system.web.extensions>
       <scripting>
       <webServices>
       <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
     </scripting>
   </system.web.extensions>
</configuration>

1

लोकलहोस्ट में विकसित होने पर मेरे पास यह मुद्दा नहीं था। हालाँकि, एक बार जब मैंने एक वेब सर्वर पर प्रकाशित किया, तो वेबसर्वर एक खाली (रिक्त) परिणाम दे रहा था और मुझे अपने लॉग में त्रुटि दिखाई दे रही थी।

मैंने अपना अजाक्स कंटेंट टाइप करके इसे ठीक किया:

"application/json; charset=utf-8"

और उपयोग:

JSON.stringify()

जिस वस्तु पर मैं पोस्ट कर रहा था।

var postData = {data: myData};
$.ajax({
                type: "POST",
                url: "../MyService.asmx/MyMethod",
                data: JSON.stringify(postData), 
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    console.log(data);
                },
                dataType: "json"
            });

1

मुझे यह त्रुटि अपाचे मॉड-मोनो के साथ भी मिली। ऐसा लगता है कि webservice के लिए प्रलेखन पृष्ठ अभी तक लिनक्स में लागू नहीं हुआ है। लेकिन इस त्रुटि के बावजूद webservice काम कर रही है। आपको इसे ?WSDLurl के अंत में जोड़कर देखना चाहिए , यानी http: //localhost/WebService1.asmx? WSL


1

मेरे मामले में त्रुटि तब हुई जब मैं अपने स्थानीय पीसी विंडोज 10 से विंडोज 2012 के साथ एक समर्पित सर्वर पर जाता हूं। इसके लिए समाधान निम्नलिखित पंक्तियों को वेब में जोड़ना था।

<webServices>
        <protocols>
               <add name="Documentation"/>
        </protocols>
</webServices>

0

Html में आपको GET के साथ कुछ इस तरह से कॉल को एक फॉर्म में संलग्न करना होगा

<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>

तुम भी एक का उपयोग कर सकते हैं POST कार्रवाई का वेब सेवा के स्थान और इनपुट टैग के माध्यम से पैरामीटर इनपुट के साथ ।

SOAPप्रॉक्सी क्लास भी हैं।


0

मेरे मामले में मेरे पास फ़ंक्शन का एक अधिभार था जो इस अपवाद का कारण बन रहा था, एक बार जब मैंने अपने दूसरे फ़ंक्शन का नाम बदल दिया तो यह ठीक चला, अनुमान लगाएं कि वेब सर्वर समर्थन फ़ंक्शन को ओवरलोडिंग नहीं करता है


0

हमारे मामले में समस्या वेब सेवा द्वारा विकल्प अनुरोध विधि (GET या POST के बजाय) का उपयोग करने के कारण हुई।

हम अभी भी नहीं जानते कि समस्या अचानक क्यों दिखाई दी। वेब सेवा HTTP और HTTPS दोनों पर 5 साल से पूरी तरह से चल रही थी। हम केवल वही हैं जो वेब सेवा का उपभोग करते हैं और यह हमेशा POST का उपयोग करता है।

हाल ही में हमने वेब सेवा एसएसएल को होस्ट करने वाली साइट बनाने का फैसला किया है। हमने नियमित रूप से GET और POST अनुरोध, विकल्प अनुरोधों के शीर्ष पर कुछ HTTP को HTTPS में परिवर्तित करने के लिए Web.config में फिर से लिखने के नियम जोड़े। विकल्प अनुरोध इस पोस्ट पर चर्चा की गई त्रुटि का कारण बने।

आवेदन के बाकी हिस्सों ने पूरी तरह से अच्छी तरह से काम किया। लेकिन हम इस समस्या के कारण सैकड़ों त्रुटि रिपोर्ट प्राप्त करते रहे।

विकल्प विधि को संभालने के लिए कई पोस्ट (जैसे यह एक ) पर चर्चा कर रहे हैं । हम Global.asax में सीधे विकल्प अनुरोध को संभालने के लिए गए थे। इससे समस्या दूर हो गई।

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var req = HttpContext.Current.Request;
        var resp = HttpContext.Current.Response;

        if (req.HttpMethod == "OPTIONS")
        {
            //These headers are handling the "pre-flight" OPTIONS call sent by the browser
            resp.AddHeader("Access-Control-Allow-Methods", "GET, POST");
            resp.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, SOAPAction");
            resp.AddHeader("Access-Control-Max-Age", "1728000");
            resp.End();
        }
    }

0

मुझे यह त्रुटि तब तक हो रही थी जब तक कि मैंने अपने वेब सेवा कॉल की शुरुआत में $ .ospReady (सत्य) ( नीचे दिए गए कोड में दिखाया गया) और समाप्त होने के बाद $ । यह पेज की तैयार स्थिति को स्थगित करने के लिए jQuery की बात है इसलिए document.ready फ़ंक्शन के भीतर कोई भी स्क्रिप्ट इस के लिए इंतजार कर रही होगी (अन्य संभव लेकिन मेरे लिए अज्ञात के बीच)।

<span class="AjaxPlaceHolder"></span>
<script type="text/javascript">
$.holdReady(true);
function GetHTML(source, section){
    var divToBeWorkedOn = ".AjaxPlaceHolder";
    var webMethod = "../MyService.asmx/MyMethod";
    var parameters = "{'source':'" + source + "','section':'" + section + "'}";

    $.ajax({
        type: "POST",
        url: webMethod,
        data: parameters,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        xhrFields: {
            withCredentials: false
        },
        crossDomain: true,
        success: function(data) {
            $.holdReady(false);
            var myData = data.d;
            if (myData != null) {
                $(divToBeWorkedOn).prepend(myData.html);
            }
        },
        error: function(e){
            $.holdReady(false);
            $(divToBeWorkedOn).html("Unavailable");
        }
    });
}
GetHTML("external", "Staff Directory");
</script>

-1

सुनिश्चित करें कि आप कस्टम त्रुटियों को अक्षम करते हैं। यह आपके कोड में मूल समस्या का सामना कर सकता है:

परिवर्तन

<customErrors defaultRedirect="~/Error" mode="On">

सेवा

<customErrors defaultRedirect="~/Error" mode="Off">

-1

एक WebMethod जिसे एक संदर्भ की आवश्यकता होती है,

[WebMethod]
public string[] GetValues(string prefixText, int count, string contextKey)

जब यह कुंजी सेट नहीं होती है, तो अपवाद मिला।

AutoCompleteExtender की कुंजी असाइन करके इसे ठीक करना।

ac.ContextKey = "myKey";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.