ASP.NET Web服务-将方法限制为HttpGet或HttpPost
我正在尝试创建一个web服务,它将以不同的方式响应HttpGet和HttpPost请求 我已通过以下方式启用了HttpGet: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似乎被完全
<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服务重写了整个过程,现在它对我来说运行正常:)