.Net将JSON数据传递到Rest GET方法

时间:2018-12-10 14:34:54

标签: .net json rest wcf

我知道,通常不应该通过GET请求发送内容! 但是,我正在为客户开发一款软件,该客户的应用程序的现有(生产中)网络休息服务使用以下方法:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[JSONPBehaviorAttribute(callback = "callback")]       
CrmDataObject Connection(CrmDataObject crmData)

我认为该方法应该为“ POST”,但应为GET,由于此代码正在生产中,并且有多个第三方软件正在调用此函数,因此在此阶段我无能为力。

但是,我试图编写一个简单的客户端来调用此方法,并且由于明显的原因而失败:

    var req = HttpWebRequest.Create(url);
    req.Method = "GET";
    req.ContentType = "application/json";
    byte[] bytes = UTF8Encoding.UTF8.GetBytes(s);

    req.ContentLength = bytes.Length;

    using (var stream = req.GetRequestStream())
    {
       stream.Write(bytes, 0, bytes.Length);
    }

从逻辑上来说,我收到“无法发送具有这种动词类型的内容主体”。

为什么第三方应用程序可以调用此方法并传递json参数?是否可以在.Net中完成?

谢谢

2 个答案:

答案 0 :(得分:1)

SOURCE 明确不允许使用请求正文,这就是为什么您获得GET的原因。

通常,您通常通过查询字符串(例如"Cannot send a content-body with this verb-type")中的URL传递GET参数。自从我进行WCF以来已经有一段时间了,但是我认为,如果您类型("path/to/page?param1=value1&param2=value2")中的属性与查询字符串匹配,这实际上可以工作-尽管我本以为您必须拥有{{3} }。

如果您已有可用的客户端代码,则理想情况下,您可以在此函数开始时附加了带有断点的调试器的同时发出请求,然后您可以看到原始请求URL(在{{1}中}对象)以及填充到CrmDataObject中的内容。

Request

答案 1 :(得分:0)

尽管有很多信息需要提出更好的建议,但我认为您的问题可能与parameter binding

??您是否尝试过在URL中传递参数?像:

www.myurl.com/Connection?param1=hello&param2=world

请注意,URL中每个参数的名称必须与模型绑定程序要解析的CrmDataObject中的属性匹配。