Использование POST и GET Ajax вызывает один и тот же WebMethod в веб-службе ASMX - PullRequest
3 голосов
/ 20 января 2010

Я не могу вызвать метод веб-службы из Ajax как с POST, так и с GET.

Первоначально будет работать только POST, и GET вызовет эту ошибку:

{"Сообщение": "Была сделана попытка вызвать метод \ u0027getData \ u0027 используя запрос GET, который не позволено. "," StackTrace ":" в System.Web.Script.Services.RestHandler.GetRawParams (WebServiceMethodData methodData, контекст HttpContext) \ r \ n
в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext контекст, WebServiceMethodData methodData)», "ExceptionType": "System.InvalidOperationException"}

Я исправил это, добавив этот атрибут: [ScriptMethod(UseHttpGet=true)], но теперь GET вызывает эту ошибку:

{"Сообщение": "Была сделана попытка вызвать метод \ u0027getData \ u0027 используя запрос POST, который не позволено. "," StackTrace ":" в System.Web.Script.Services.RestHandler.GetRawParams (WebServiceMethodData methodData, контекст HttpContext) \ r \ n
в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContext контекст, WebServiceMethodData methodData)», "ExceptionType": "System.InvalidOperationException"}

Так правда ли, что вы можете использовать только POST или GET, а не оба из Ajax? Кто-нибудь знает, почему это происходит или есть обходной путь?

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 20 января 2010

Вы можете настроить службу ASMX для ответа как на GET, так и на POST, но я не верю, что есть какой-то разумный способ заставить их отвечать на GET с помощью JSON. Без сериализации JSON они не подходят для использования в вызовах AJAX.

Если вы хотите запросить JSON через GET, вам нужно использовать службу HttpHandler или WCF.

Кроме того, вы должны быть уверенным, что знаете, что делаете, прежде чем показывать JSON с помощью GET .

1 голос
/ 01 октября 2011

Почему бы просто не иметь две отдельные веб-службы, одну для GET и одну POST

<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
1 голос
/ 01 января 2011

Веб-службы ASMX поддерживают JSON GET, используя следующий синтаксис.

0 голосов
/ 20 января 2010

Вы должны попробовать это с WCF.Веб-сервисы ASMX теперь считаются «устаревшей технологией», и Microsoft заявила, что они сейчас находятся в «режиме обслуживания» и вряд ли исправят ошибки.

...