【问题标题】:xml POST with RestSharp带有 RestSharp 的 xml POST
【发布时间】:2016-08-04 01:49:44
【问题描述】:

我正在使用 RestSharp 发布以下内容:

POST API/storage
Content-Type: application/xml
<StorageDocument xmlns="http://xml.somename.com/schema/somename">
  <type>LOCAL</type>
  <method>
    <uri>file:///path/to/files/</uri>
    <read>true</read>
    <write>true</write>
    <browse>true</browse>
    <type>NONE</type>
 </method>
 <autoDetect>true</autoDetect>
</StorageDocument>

我的代码:

private void button2_Click(object sender, EventArgs e)
    {
        var client = new RestClient();

        client.BaseUrl = new Uri(baseUrlString);
        client.Authenticator = new HttpBasicAuthenticator("admin", "admin");

        var request = new RestRequest("API/storage", Method.POST);

        request.AddParameter ("Content-Type", "application/xml");
        request.RequestFormat = DataFormat.Xml;

        string xml =
            "<StorageDocument xmlns=\"http://xml.somename.com/schema/somename\">" + Environment.NewLine +
            "<type>LOCAL</type>" + Environment.NewLine +
            "<method>" + Environment.NewLine +
              "<uri>file:///path/to/files/</uri>" + Environment.NewLine +
              "<read>true</read>" + Environment.NewLine +
              "<write>true</write>" + Environment.NewLine +
              "<browse>true</browse>" + Environment.NewLine +
              "<type>NONE</type>" + Environment.NewLine +
            "</method>" + Environment.NewLine +
            "<autoDetect>true</autoDetect>" + Environment.NewLine +
            "</StorageDocument>";


        request.AddBody(xml);

        IRestResponse response = client.Execute(request);

        MessageBox.Show(Convert.ToString(response.Content));
    }

当我发布时,我得到“HTTP 415 Unsupported Media Type”。我尝试了很多东西,但无法弄清楚问题出在哪里。我相信它与请求的 xml 或正文有关,但找不到解决方案。

有什么想法吗?提前致谢

【问题讨论】:

    标签: xml restsharp


    【解决方案1】:

    这对我这种情况的人可能有用,这段代码有效

    private void button2_Click(object sender, EventArgs e)
        {
            var client = new RestClient();
    
            client.BaseUrl = new Uri(baseUrlString);
            client.Authenticator = new HttpBasicAuthenticator("admin", "admin");
    
    
            var request = new RestRequest("API/storage", Method.POST);
    
    
            string rawXml = "<StorageDocument xmlns=\"http://xml.somename.com/schema/somename\"><type>LOCAL</type><method><uri>file://home/Testuser/storage/</uri><read>true</read><write>true</write><browse>true</browse><type>NONE</type></method><autoDetect>true</autoDetect></StorageDocument>";
    
            request.AddParameter("application/xml", rawXml, ParameterType.RequestBody);
    
            IRestResponse response = client.Execute(request);
    
            MessageBox.Show(Convert.ToString(response.Content));
        }
    

    关键是使用AddParameter而不是AddBody,这里提到 RestSharp PUT XML, RestSharp is sending it as GET? 通过理查德朋友

    【讨论】:

    • 你救救我!谢谢!
    • 伙计们,如何在这段代码中添加一个 fileStream。例如,我的 xml cid:123456 中有一行,我在我的 SOAP UI 中选择了一个 Part = 123456 的附件。我可以在 C# 中添加这个文件流吗?谢谢
    【解决方案2】:

    这可能对某人有帮助……这对我有用

                var postUrl = "https://your-api.com/resource/path";
            string rawXml = "<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
    
            IRestClient client = new RestClient();
            IRestRequest request = new RestRequest
            {
                Resource = postUrl
            };
    
            request.AddHeader("Content-Type", "text/xml");
            request.AddHeader("Accept", "text/xml");
            request.AddParameter("text/xml", rawXml, ParameterType.RequestBody);
    
            var response = client.Post<Note>(request);
    
            Assert.IsNotNull(response.Data);
    

    【讨论】:

    • 谢谢。这让我到达了我需要的地方。我还必须暂时覆盖 RemoteCertificateValidationCallback 以使其始终为真。
    猜你喜欢
    • 2013-03-15
    • 2017-07-23
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多