ASP.NET Web服务-将方法限制为HttpGet或HttpPost

ASP.NET Web服务-将方法限制为HttpGet或HttpPost,asp.net,web-services,http-post,asmx,http-get,Asp.net,Web Services,Http Post,Asmx,Http Get,我正在尝试创建一个web服务,它将以不同的方式响应HttpGet和HttpPost请求 我已通过以下方式启用了HttpGet: <webServices> <protocols> <add name="HttpGet"/> </protocols> </webServices> [ScriptMethod(UseHttpGet = false)] 然而,HttpGet、HttpPost和ActionName似乎被完全

我正在尝试创建一个web服务,它将以不同的方式响应HttpGet和HttpPost请求

我已通过以下方式启用了HttpGet:

<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>
</webServices>
[ScriptMethod(UseHttpGet = false)]
然而,HttpGet、HttpPost和ActionName似乎被完全忽略了。所有对HelloWorld(post或get)的请求都会触发第二个函数。我需要用别的方法吗?我还尝试通过以下方式限制功能:

<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>
</webServices>
[ScriptMethod(UseHttpGet = false)]

但是这也没有什么区别。

ASP.NET Web服务应用程序的行为与ASP.NET MVC不同,这与您的期望一致。在您的代码中,HttpGet/HttpPost和ActionName属性都属于MVC,Amiram Korach指出了这一点。当作为web服务应用程序托管时,这些属性将被忽略

web服务应用程序中的“路由”基于方法名(HelloWorldPost和HelloWorld),而不是基于HTTP谓词

要触发POST流,必须调用
HelloWorldPost
(service.asmx/HelloWorldPost)

我有个主意

首先,您的yor web服务的web.config文件如下所示:

<webServices>
  <protocols>
     <add name="HttpGet"/>
     <add name="HttpPost"/>
  </protocols>
</webServices>

我的主要观点是,您要检查
HttpContext.Current.Request.HttpMethod
,并根据使用的方法调用不同的方法。

您使用的是asp.net webapi吗?我想不是。。。我正在使用Visual Studio(.NET framework 3.5)中的“ASP.NET Web服务应用程序”项目类型。我没有下载任何附加的libs或api。HttpPostAttribute来自MVC,仅存在于.NET 4.0中。您使用的是古老的ASMX技术,不应用于新的开发。谢谢。你几乎证实了我的猜测——我混淆了两件不同的事情。我使用WCF服务重写了整个过程,现在它对我来说运行正常:)