我知道,通常不应该通过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中完成?
谢谢
答案 0 :(得分:1)
SOURCE
明确不允许使用请求正文,这就是为什么您获得GET
的原因。
通常,您通常通过查询字符串(例如"Cannot send a content-body with this verb-type"
)中的URL传递GET参数。自从我进行WCF以来已经有一段时间了,但是我认为,如果您类型("path/to/page?param1=value1¶m2=value2"
)中的属性与查询字符串匹配,这实际上可以工作-尽管我本以为您必须拥有{{3} }。
如果您已有可用的客户端代码,则理想情况下,您可以在此函数开始时附加了带有断点的调试器的同时发出请求,然后您可以看到原始请求URL(在{{1}中}对象)以及填充到CrmDataObject
中的内容。
Request
答案 1 :(得分:0)
尽管有很多信息需要提出更好的建议,但我认为您的问题可能与parameter binding
??您是否尝试过在URL中传递参数?像:
www.myurl.com/Connection?param1=hello¶m2=world
请注意,URL中每个参数的名称必须与模型绑定程序要解析的CrmDataObject中的属性匹配。