Le format de demande n'est pas reconnu pour L'URL se terminant de façon inattendue dans

Ce n'est pas une question-l'afficher ici pour référence:

Lors de la consommation D'un WebService, j'ai eu l'erreur suivante:

Le format de requête n'est pas reconnu pour L'URL se terminant de façon inattendue par / myMethodName

250
demandé sur roman m 2009-03-18 11:05:03

14 réponses

Trouvé une solution sur ce site

Tout ce dont vous avez besoin est d'ajouter ce qui suit à votre site web.config

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

Plus d'infos à partir de Microsoft

461
répondu roman m 2018-05-21 23:24:57

Malgré 90% de toutes les informations que j'ai trouvées (en essayant de trouver une solution à cette erreur) me disant d'ajouter les HttpGet et HttpPost à la configuration, cela n'a pas fonctionné pour moi... et ça n'avait aucun sens pour moi de toute façon.

Mon application fonctionne sur beaucoup de serveurs (30+) et je n'ai jamais eu à ajouter cette configuration pour aucun d'entre eux. Soit la version de l'application fonctionnant sous. net 2.0 ou. NET 4.0.

La solution pour moi était de réenregistrer ASP.NET votent contre IIS.

J'ai utilisé la ligne de commande suivante pour y parvenir...

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
16
répondu freefaller 2016-10-19 16:57:08

Assurez-vous que vous utilisez la bonne méthode: Post/Get, le bon type de contenu et les bons paramètres (données).

$.ajax({
    type: "POST",
    url: "/ajax.asmx/GetNews",
    data: "{Lang:'tr'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) { generateNews(msg); }
})
14
répondu x-freestyler 2011-01-26 18:28:25

Superbe.

Cas 2-où le même problème peut survenir) dans mon cas, le problème était dû à la ligne suivante:

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

Cela fonctionne bien dans le serveur car les appels sont effectués directement à la fonction webservice - cependant, cela échouera si vous exécutez le service directement à partir de. Net dans l'environnement de débogage et que vous voulez tester l'exécution manuelle de la fonction.

7
répondu Kalpesh Popat 2013-02-05 06:26:45

Pour mémoire, je recevais cette erreur lorsque j'ai déplacé une ancienne application d'un serveur à un autre. J'ai ajouté les éléments <add name="HttpGet"/> <add name="HttpPost"/> sur le web.config, qui a changé l'erreur en:

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)

Afin de corriger cette erreur, j'ai dû ajouter les lignes ScriptHandlerFactory au web.configuration:

  <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>

Pourquoi cela a fonctionné sans ces lignes sur un serveur web et pas l'autre Je ne sais pas.

2
répondu Sprintstar 2014-04-01 11:22:39

J'utilise la ligne de code suivante pour résoudre ce problème. Écrivez le code suivant dans le web.fichier de configuration

<configuration>
    <system.web.extensions>
       <scripting>
       <webServices>
       <jsonSerialization maxJsonLength="50000000"/>
      </webServices>
     </scripting>
   </system.web.extensions>
</configuration>
1
répondu pankaj prajapati 2016-04-26 10:39:43

Je n'ai pas eu le problème lors du développement dans localhost. Cependant, une fois que j'ai publié sur un serveur web, le webservice renvoyait un résultat vide (vide) et je voyais l'erreur dans mes journaux.

Je l'ai corrigé en définissant mon ajax contentType sur:

"application/json; charset=utf-8"

Et en utilisant :

JSON.stringify()

Sur l'objet que je publiais.

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
répondu Jason Williams 2016-10-26 18:08:29

En html, vous devez joindre l'appel dans un formulaire A avec un GET avec quelque chose comme

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

, Vous pouvez également utiliser un POST avec l'action de l'emplacement du service web et d'entrée le paramètre via une balise input.

Il existe également des classes SOAP et proxy.

0
répondu Dave 2012-10-21 14:26:16

Dans mon cas, j'ai eu une surcharge de fonction qui causait cette Exception, une fois que j'ai changé le nom de ma deuxième fonction, il a fonctionné correctement, devinez que le serveur web ne supporte pas la surcharge de la fonction

0
répondu Amir Shrestha 2015-04-13 05:25:05

J'ai aussi eu cette erreur avec apache mod-mono. Il semble que la page de documentation pour webservice n'est pas encore implémentée sous linux. Mais le webservice fonctionne malgré cette erreur. Vous devriez le voir en ajoutant ?WSDL à la fin de l'url, c'est-à-dire http://localhost/WebService1.asmx?WSDL

0
répondu l0pan 2016-12-18 22:05:17

Dans notre cas, le problème a été causé par le service web appelé en utilisant la méthode de requête OPTIONS (au lieu de GET ou POST).

Nous ne savons toujours pas pourquoi le problème est soudainement apparu. Le service web fonctionnait parfaitement depuis 5 ans sur HTTP et HTTPS. Nous sommes les seuls à consommer le service web et il utilise toujours POST.

Récemment, nous avons décidé de rendre le site qui héberge le service web SSL uniquement. Nous avons ajouté des règles de réécriture Sur le Web.config pour convertir quoi que ce soit HTTP en HTTPS, déployé, et immédiatement commencé à obtenir, en plus des demandes GET et POST régulières, des demandes D'OPTIONS. Les demandes D'OPTIONS ont provoqué l'erreur discutée sur ce post.

Le reste de l'application a parfaitement fonctionné. Mais nous avons continué à obtenir des centaines de rapports d'erreur en raison de ce problème.

Il y a plusieurs messages (par exemple celui-ci) discutant de la façon de gérer la méthode OPTIONS. Nous sommes allés pour gérer la demande D'OPTIONS directement dans le Mondial.asax. Cela a fait disparaître le problème.

    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
répondu cockypup 2018-04-12 23:45:06

Dans mon cas, l'erreur s'est produite lorsque je passe de mon PC local Windows 10 à un serveur dédié avec Windows 2012. La solution pour était d'ajouter au web.config les lignes suivantes

<webServices>
        <protocols>
               <add name="Documentation"/>
        </protocols>
</webServices>
0
répondu Ruby Kousinovali 2018-07-31 20:53:50

Assurez-vous de désactiver les erreurs personnalisées. Cela peut masquer le problème d'origine dans votre code:

Modifier

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

À

<customErrors defaultRedirect="~/Error" mode="Off">
-1
répondu Milan de Jong 2015-05-15 09:57:32

Une WebMethod qui nécessite une ContextKey,

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

Lorsque cette clé n'est pas définie, a obtenu l'exception.

Le réparer en assignant la clé D'AutoCompleteExtender.

ac.ContextKey = "myKey";
-1
répondu Rm558 2015-09-28 15:58:16