294 votes

Le format de la requête n'est pas reconnu pour une URL se terminant de manière inattendue par

Il ne s'agit pas d'une question, mais d'une référence :

Lors de la consommation d'un WebService, j'ai obtenu l'erreur suivante :

Le format de la requête n'est pas reconnu pour une URL se terminant de manière inattendue par /monMéthodeNom

5 votes

Pour faciliter la tâche de Google, la traduction allemande du message d'erreur se lit comme suit : " Format de demande inconnu pour une URL se terminant inopinément par '/_myMethodName'. ".

0 votes

Et la traduction chinoise : " URL /monMéthodeNom "

538voto

roman m Points 9998

J'ai trouvé une solution sur ce site web

Il vous suffit d'ajouter les éléments suivants à votre web.config

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

Plus d'informations sur Microsoft

3 votes

Je pense que tout ce que vous avez à faire est de remplacer <system.web> par <system.webserver>.

0 votes

Je l'ai gardé tel quel et pour l'instant l'erreur semble avoir disparu. Si je vois à nouveau l'erreur, je déplacerai les configurations des webservices dans la section webserver.

0 votes

Cela m'a juste empêché de voir l'erreur. Maintenant, ce que je peux voir est juste une page blanche.

18voto

freefaller Points 7201

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

Mon application fonctionne sur de nombreux serveurs (plus de 30) et je n'ai jamais eu à ajouter cette configuration pour aucun d'entre eux. Que ce soit la version de l'application fonctionnant sous .NET 2.0 ou .NET 4.0.

La solution pour moi a été de réenregistrer ASP.NET par rapport à IIS.

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

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

0 votes

Cela a réglé mon problème. J'obtenais la même erreur que le PO, sur un site qui fonctionnait auparavant. Il s'avère que quelqu'un a activé .NET 3.5 via les fonctionnalités de Windows (pour des raisons sans rapport), ce qui a cassé mon site. aspnet_regiis -i Mais c'est réparé.

17voto

Hasan Gürsoy Points 3682

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); }
})

1 votes

Mon passage de valeur de paramètre a obtenu le problème dû au type de données, et les valeurs manquantes, qui finissent par l'erreur 500. maintenant il est résolu.

0 votes

Ajouter content-type: application/json a résolu ce problème pour moi aussi.

14voto

Kalpesh Popat Points 61

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 faits directement à la fonction webservice - mais 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 de la fonction manuellement.

0 votes

J'ai ajouté cette logique au web.config pour empêcher l'affichage de la définition lors de la navigation vers le service .asmx. Apparemment, cela a cassé ActiveReports. Heureux de savoir que c'est probablement un symptôme de test local et que cela fonctionnera sur le serveur. Merci.

3voto

Sprintstar Points 3665

Pour mémoire, j'ai obtenu cette erreur lorsque j'ai déplacé une ancienne application d'un serveur à un autre. J'ai ajouté le <add name="HttpGet"/> <add name="HttpPost"/> au web.config, ce 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 à 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>

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X