对ASMX Web服务中的同一WebMethod使用POST和GET Ajax调用

时间:2010-01-20 06:33:02

标签: asp.net ajax service asmx

我似乎无法使用POST和GET从Ajax调用Web服务方法。

最初只有POST才能正常工作,而GET会导致此错误:

  

{“消息”:“试图进行   调用方法\ u0027getData \ u0027   使用GET请求,但不是   允许。“,”StackTrace“:”at   System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData   methodData,HttpContext context)\ r \ n
  在   System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的   context,WebServiceMethodData   methodData)”, “ExceptionType”: “System.InvalidOperationException”}

我通过添加此属性修复了此问题:[ScriptMethod(UseHttpGet=true)]但现在GET导致此错误:

  

{“消息”:“试图进行   调用方法\ u0027getData \ u0027   使用POST请求,但不是   允许。“,”StackTrace“:”at   System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData   methodData,HttpContext context)\ r \ n
  在   System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的   context,WebServiceMethodData   methodData)”, “ExceptionType”: “System.InvalidOperationException”}

所以你只能使用POST或GET而不是Ajax都可以吗?有谁知道为什么会发生这种情况或是否有解决方法?

提前致谢!

4 个答案:

答案 0 :(得分:2)

可以配置ASMX服务以响应GET和POST,但我不相信有任何合理的方法让他们使用JSON响应GET。如果没有JSON序列化,它们就不适合在AJAX调用中使用。

如果您想通过GET请求JSON,则需要使用HttpHandler或WCF服务。

此外,您应该be sure that you know what you're doing before exposing JSON via GET

答案 1 :(得分:1)

ASMX Web服务使用以下语法支持JSON GET。

<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

答案 2 :(得分:1)

为什么不只有两个单独的Web服务,一个用于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

答案 3 :(得分:0)

您应该使用WCF尝试此操作。 ASMX Web服务现在被认为是“遗留技术”,微软已经表示它们现在处于“维护模式”,并且不太可能修复错误。