传递流时出现 Wcf Rest Service 错误
Posted
技术标签:
【中文标题】传递流时出现 Wcf Rest Service 错误【英文标题】:Wcf Rest Service error while passing stream 【发布时间】:2014-09-17 11:41:09 【问题描述】:我可以使用邮递员在 wcf 休息服务中点击该方法。
但是我使用 JIRA webhook,当我点击 API 时,它给了我 400 错误
Client error - 400 when posting to web hook at 'http://localhost:12456/JiraRestWebhook.svc/GetData/TES-217?user_id=james&user_key=jamesD'
我的方法如下:
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json
, UriTemplate = "GetData/value"
)]
string GetData(string value, Stream c);
我可以使用邮递员成功地击中它。该请求还包含原始数据。
但我的 JIRA webhook 在更新/创建任何问题时出现此错误。
请注意:- 如果我从方法中删除 Stream Param。那么我的服务就能给我结果。
【问题讨论】:
【参考方案1】:在您的 WCF 界面中有几处值得纠正的地方: 1. 首先你应该考虑在 WebInvoke 中添加 Method = "GET"。 2. 由于您使用的是“GetData/value”,因此您请求的 URL 应该看起来像这样。 value 是它将选择您作为参数传递的值字符串的地方。
'http://localhost:12456/JiraRestWebhook.svc/GetData/jamesD'
-
不确定为什么要传递 Stream c 和其他参数。如果您希望在此处传递 json 请求,则需要在 WCF 服务中进行一些更改。
您的运营合同应如下所示:
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json
, UriTemplate = "GetData" //this can be anything like GetDate/Json/GeMeData
)]
string GetData(Stream c);
您的 GetData 现在具有您需要使用反序列化转换为对象的 JSON 请求。
【讨论】:
我的代码中的所有内容都是正确的,正如我之前解释的那样,如果我在 chrome 中使用 Postman restclient 发布到我的 url。它按预期工作,但如果我在 JIRA 中使用 webhook,则相同的代码不起作用。以上是关于传递流时出现 Wcf Rest Service 错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 json.net 和 WCF Rest Service 将 XML 转换为 JSON 输出时出现反斜杠问题
将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题