我似乎无法使用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都可以吗?有谁知道为什么会发生这种情况或是否有解决方法?
提前致谢!
答案 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服务现在被认为是“遗留技术”,微软已经表示它们现在处于“维护模式”,并且不太可能修复错误。