【问题标题】:Passing a string param to a RESTful service during POST action在 POST 操作期间将字符串参数传递给 RESTful 服务
【发布时间】:2011-12-17 04:44:25
【问题描述】:

我正在使用以下方法提供 RESTful 服务:

[WebInvoke] 
string GetDataFromStringAsString(string xmlString); 

我的客户对该方法的调用如下:

var client = new RestClient(); 
client.BaseUrl = serviceBaseUrl; 
var request = new RestRequest(method){RequestFormat = DataFormat.Xml}; 
request.Resource = resourceUrl; 
request.AddParameter("text/xml", requestBody, 
ParameterType.RequestBody); 
var response = client.Execute(request); 

让我们将一个字符串作为“Hello World”发布。

现在我发布到上述方法的字符串给了我 400 Bad 要求。为了让它工作,我不得不将上面的字符串包装在 一个元素如下图:

<string xmlns="http://schemas.microsoft.com/2003/10/ 
Serialization/">Hello World</string> 

现在,当我发布上述字符串时,我会从 服务器。

为什么我必须手动包装字符串才能使其工作。是 有一种方法可以实现在不执行的情况下发布字符串 以上手动。

【问题讨论】:

    标签: wcf rest wcf-rest restsharp


    【解决方案1】:

    我知道的唯一其他方法是使用流作为您的输入参数。例如

    [WebInvoke] 
    string GetDataFromStringAsString(stream xmlString);
    

    .Net 4 WCF REST 的问题在于,从根本上说,WCF 只知道如何传递两种类型的信息,XML 或字节流。就个人而言,我会使用 WCF Web API 而不是标准的 WCF REST 库,因为您会遇到更多此类问题。

    【讨论】:

    • 嗨 Darrel,是的,我知道另一种选择是也使用流或 XElement。但假设我是客户,我不知道服务上的方法是否使用类型字符串或流或 XElement。在这些情况下我该怎么做?
    • @Rajesh 如果您使用流,那么客户端可以发送它想要的任何内容。由您的服务读取客户端指定的 Content-type 并适当地解释字节流。
    • 嗨 Darrel,我是需要调用服务的客户。我怎么知道它是流还是字符串还是 XElement?
    • @Rajesh 客户端发送一堆字节。客户端使用什么类型来保存那一堆字节并没有什么区别。使用的内容类型是客户端和服务器之间关于如何解释这些字节的含义的协议。 .Net 类型与 REST 服务无关。
    • 嗨,Darrel,这是否意味着在调用服务时最好始终将值作为字节发送。
    猜你喜欢
    • 2011-08-07
    • 2012-07-03
    • 2016-07-07
    • 1970-01-01
    • 2015-06-03
    • 2012-02-25
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多