1

在过去的几天里,我一直在为此苦苦挣扎。我已经研究了这个问题并尝试了发布的解决方案。然而它没有奏效。我有 REST WCF Post 方法

     [OperationContract(Name = "ImportRawJson")]
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json,
            UriTemplate = "ImportRawJson/username/{username}/password/{password}/fileName/{fileName}")]
    string ImportRawJson(string username, string password, string fileName, string jsonStream);

我可以通过网络客户端使用它。但是,当我尝试通过 Fiddler 像下面的 body 参数调用时,总是会导致 null 并且我得到一个异常。

提琴手:发布 http: localhost///TimesheetService/Timesheet.svc/ImportRawJson/username/user/password/pwd/fileName/testfiddler

请求标头:用户代理:提琴手主机:localhost 内容长度:32 内容类型:应用程序/json;字符集=utf-8

请求正文:{“jsonStream”:{“ImportRaw”:{“TestXml”:{“xml”:“test”}}}}

错误:HTTP/1.1 400 错误请求缓存控制:私有内容长度:127 内容类型:应用程序/json;charset=utf-8 服务器:Microsoft-IIS/7.5 X-AspNet-Version:4.0.30319 Set-Cookie:ASP.NET_SessionId=wh4qxcu1x0vmiv45mmzuuaup;路径=/; HttpOnly X-Powered-By:ASP.NET 日期:2013 年 5 月 7 日星期二 14:00:58 GMT

{"ErrorCode":"Error","Message":"过程或函数需要参数 'jsonStream',但未提供。"}

关于如何传递 body 参数的任何帮助。我真的很感激。我被困在这一点上。请帮忙!!提前致谢

4

1 回答 1

1

您的代码中有几个问题。首先,如果“JSON 流”是指任何 JSON 文档,那么您将无法在string代码中使用该类型。相反,你需要把它当作一个Stream(它基本上可以接受任何任意输入)。如果将输入作为字符串,则应将 JSON 字符串传递给它。由于您将主体类型设置为WrappedRequest,因此您需要将 JSON 字符串包装在一个对象中,参数名称是成员名称,而您想要传递给函数的值是值。例如,要将字符串传递hello world给您的操作,您需要传递此请求正文:

{"jsonStream":"hello world"}

但是,如果我猜对了,并且您想采用任意 JSON,则需要使用Stream参数。http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx上的博客文章有更多关于如何实现它的信息。

于 2013-05-08T05:57:45.297 回答