ASP.NET Web服务POST / GET通过REST不可用?

时间:2010-07-01 08:49:04

标签: php asp.net web-services rest soap

我正在使用基于.NET的Web服务,其中一些API调用可以通过HTTP POST / GET访问,但在其他API调用中只有SOAP 1.1 / 1.2可用。

已经开发API的公司已回复我说了以下内容,我想知道他是否试图将羊毛拉过我的眼睛,或者他是否说出真相。他的回答并不适合我,所以我想我会尝试检查但是找不到答案。

  

我觉得我很奇怪   没有在上面指定任何东西   其他方法,以使它们   可以使用HTTP Post或HTTP访问   获得协议。我已全球设定它   所以他们都应该可以访问。   我一直在研究这个问题   似乎是HTTP Post和HTTP Get   协议只能用于   使用简单类型的方法,例如   方法采用的是整数   参数。您列出的方法   下面采取更复杂的对象,例如   可空类型或自定义对象。   但是,可以使用SOAP协议   用这种复杂的方法。

2 个答案:

答案 0 :(得分:0)

他的解释是正确的。 POST / GET只允许使用典型的基元 - int,string,bool等。或者更确切地说,可以用简单的名称/值对解释的参数。 SOAP协议处理.Net中的Web服务的XML方面(听起来他正在谈论遗留的ASMX服务。)

更新:这里有一点背景。听起来你的联系人对.Net网络服务并不了解,所以虽然他的描述是基于所知道的,但它肯定不是对环境的限制;他只需要做更多的工作。

答案 1 :(得分:0)

他不对。您可以使用DataContractSerializer发送和GET复杂类型。

以下是我最近回答另一个问题的一些代码:

要POST参数,需要使用DataContractSerializer对其进行序列化。 e.g,

在服务器上:

[OperationContract]
[WebInvoke(Method="POST",UriTemplate = "/foos")]
void PostFoo(Foo foo) {}

在客户端:

var foo = new Foo();
var content = HttpContentExtensions.CreateDataContract<Foo>(foo);
var client = new HttpClient("http://example.org/service.svc/foos");
client.Post(content)

客户端代码使用WCF Rest Starter工具包中的Microsoft.Http库。