我有一个REST POST方法如下:
[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
string GetFromXml(XElement xmlString);
我正在尝试使用以下代码从我的客户端进行后期操作:
var client = new RestClient();
client.BaseUrl = "http://localhost/XMLRestService/XmlService.svc";
var request = new RestRequest(Method.POST);
request.Resource = "GetFromXml";
client.AddDefaultHeader("Content-Type", "text/xml");
request.AddBody(obj, "XMLRestService");
var response = client.Execute(request);
当我执行上述操作时,我收到400 Bad请求。然后,我在WCF服务上启用了跟踪。并且堆栈跟踪给了我一个无法识别的消息版本,这个版本被System.ServiceModel.CommunicationException
类抛出了。
我无法成功发布请求。帮助赞赏。
答案 0 :(得分:0)
我要尝试的第一件事是使用application / xml而不是text / xml
答案 1 :(得分:0)
我终于找到了异常的根本原因。以下代码非常完美:
var client = new RestClient();
client.BaseUrl = serviceBaseUrl;
var request = new RestRequest(method){RequestFormat = DataFormat.Xml};
request.Resource = resourceUrl;
request.AddParameter("text/xml",requestBody, ParameterType.RequestBody);
var response = client.Execute(request);
作为参数发送的requestBody应该是序列化的xmlString。
注意:如果REST服务上公开的复合类型使用的是DataContractSerializer,那么请确保使用DataContractSerializer生成requestBody,如果使用XmlSerializer,则使用XmlSerializer生成requestBody。
答案 2 :(得分:0)
将您的请求附在肥皂信封中。我DIY我的请求,当我忘记做必要时我得到了这个错误。
契约优先,javascript,ajax,jquery,都要求你处理细节。对我而言,这是一个毫无疑问的事情,但是我几个小时都没有看到明显的事情。