传递流时出现 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 输出时出现反斜杠问题

尝试发布到 wcf rest 4 服务时出现错误请求

将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题

如何在 WCF Rest Service 中将类对象作为参数传递

如何在 WCF Rest Service 中传递多个参数?

在 wcf rest 中发送 xml 请求时出现错误请求 400