2010-01-20 6 views
3

Je n'arrive pas à appeler une méthode de service Web à partir d'Ajax avec POST et GET.Utilisation des appels POST et GET Ajax pour le même WebMethod dans le service Web ASMX

Initialement, seul le POST fonctionnerait et EEG provoque cette erreur:

{"Message":"An attempt was made to call the method \u0027getData\u0027 using a GET request, which is not allowed.","StackTrace":" at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Je fixe en ajoutant cet attribut: [ScriptMethod(UseHttpGet=true)] mais maintenant GET provoque cette erreur:

{"Message":"An attempt was made to call the method \u0027getData\u0027 using a POST request, which is not allowed.","StackTrace":" at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Ainsi est-il vrai que vous ne pouvez utiliser que POST ou GET et pas les deux à partir d'Ajax? Est-ce que quelqu'un sait pourquoi cela se produit ou s'il existe une solution de contournement?

Merci d'avance!

Répondre

2

Vous pouvez configurer un service ASMX pour répondre à la fois GET et POST, mais je ne crois pas qu'il y ait une façon raisonnable de les faire répondre à JSON GET. Sans la sérialisation JSON, ils ne sont pas vraiment appropriés pour une utilisation dans les appels AJAX.

Si vous souhaitez demander JSON via GET, vous devez utiliser un service HttpHandler ou WCF.

De même, vous devriez be sure that you know what you're doing before exposing JSON via GET.

+0

Je comprends le risque, mais les requêtes GET sont destinés à être utilisés avec JSONP. – celticpride

0

Vous devriez essayer ceci avec WCF. Les services Web ASMX sont maintenant considérés comme des «technologies héritées», et Microsoft a déclaré qu'ils sont maintenant en «mode maintenance» et qu'il est peu probable qu'ils aient des bogues corrigés.

1

Les services Web ASMX prennent en charge les GET JSON en utilisant la syntaxe suivante.

<System.Web.Script.Services.ScriptService()> _ 
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ 
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
Public Class TestService 
    Inherits System.Web.Services.WebService 

    <WebMethod()> _ 
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _ 
    Public Function HelloWorld() As String 
     Return "Hello World" 
    End Function 


End Class 
+0

Désolé de son retard, je viens de réaliser que vous voulez à la fois les messages et les messages de travailler en même temps. Je vous ferai savoir si je trouve un moyen ... –

1

Pourquoi ne pas avoir que deux services Web distincts, l'un pour GET et POST un

<WebMethod()> _ 
<ScriptMethod(UseHttpGet:=True)> 
Public Function HelloWorld_GET() As String 
    Return "Hello World" 
End Function 

<WebMethod()> _ 
Public Function HelloWorld_POST() As String 
    Return "Hello World" 
End Function 
Questions connexes