Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用rest在rest调用主体中发布XML_C#_Xml_Restsharp - Fatal编程技术网

C# 使用rest在rest调用主体中发布XML

C# 使用rest在rest调用主体中发布XML,c#,xml,restsharp,C#,Xml,Restsharp,我在尝试使用Rest Sharp制作帖子时遇到问题。我正在尝试调用一个不完全符合现代标准的web服务,我需要能够在我的帖子正文中发布请求XML 如果我只是在RestRequest对象上执行request.AddBody(xmlObject),则会向请求中添加一个名为text/xml的参数。在这种情况下,我从服务器得到一个错误响应,说“抛出异常:prolog中不允许内容”。这告诉我服务器正在尝试处理参数的键(text/xml=)和值 当我在chrome中使用REST控制台并在RAW body字段中

我在尝试使用Rest Sharp制作帖子时遇到问题。我正在尝试调用一个不完全符合现代标准的web服务,我需要能够在我的帖子正文中发布请求XML

如果我只是在RestRequest对象上执行request.AddBody(xmlObject),则会向请求中添加一个名为text/xml的参数。在这种情况下,我从服务器得到一个错误响应,说“抛出异常:prolog中不允许内容”。这告诉我服务器正在尝试处理参数的键(text/xml=)和值

当我在chrome中使用REST控制台并在RAW body字段中使用所需的xml请求时,一切都按预期工作

有没有办法让我和Rest Sharp一起工作


编辑:看起来我需要使用request.AddFile(“name”,bytes\u to\u add,“file\u name”)。然而,当我尝试这样做时,我得到一个异常(“System.InvalidOperationException:在开始写入之后无法设置此属性。”),它看起来像一个从未解决的带有RestSharp的异常。我可能不得不使用HttpWebRequest库发出请求。

您可能想得太多了。AddBody将对象作为参数,并根据RequestFormat属性,使用JSON或XML序列化程序自动将其序列化为正确的格式

直接添加XML是没有意义的。REST的神奇之处在于它支持多种格式,而不仅仅是XML。RestSharp就是这样写的,所以它的所有公共接口都使用poco


简单的解决方案就是不序列化对象。如果不想添加xmlObject,只需将真正的C#对象传递给AddBody方法,让它处理序列化。

我应该更清楚地命名传递给AddBody的对象。我自己并没有序列化对象,我应该把它叫做requestModel或类似的东西。Rest Sharp序列化工作得很好,但服务器响应时出现了我在文章中提到的错误。如果我想在出现故障时进行调试,并且BizTalk是客户端,那么直接发布xml是非常有意义的。@ThomasEyde我不认为直接发布xml是解决问题的正确方法。您可以使用自定义序列化程序查看或控制正在发生的事情,或者使用Fiddler或Wireshark之类的工具查看它。在试图发送请求的同一个应用程序代码中担心XML序列化是一种混杂的担忧(以及糟糕的OO设计)。@TimCopenhaver,我想你误解了我的需求:我有一个客户从BizTalk调用我的api。有些东西失败了,他们只能向我提供xml。现在我必须用这段xml进行测试/调试,我想用代码来完成。主要是因为我认为这比设置fiddler容易,但也因为代码可以在重启之间保存。这是关于调试,而不是编写api客户机。啊,我理解你的情况。实际上,对于调试来说,代码并不总是最好的选择。其他工具(如SoapUI)已经被设计为完全处理这种情况,因此我可以理解为什么他们不将其包含在RestSharp中?最简单的方法是用小提琴捕捉它。这个异常通常意味着在请求的开始标记之前有一些数据。我通过使用HttpWebRequest并直接写入请求流使它工作。我仍在使用Rest Sharp序列化程序,因此我知道对象已正确序列化。但我不喜欢直接使用HttpWebRequest。因此,我克隆了Rest Sharp代码,看看我是否能够找出如何修复抛出的异常