为什么此请求使用HttpWebRequest可以工作,而不能与RestSharp一起使用?

问题描述 投票:0回答:1

我正在使用在主体请求中要求XML的API。首先,我通过Postman使用了api,并且可以正常工作,然后我使用Postman的工具将请求转换为RestCharp C#代码,然后使用该代码,我收到的响应与postman有所不同。之后,我使用Fiddler来与邮递员请求生成c#代码,并使用fiddler生成的代码,我能够通过代码成功使用API​​。我只是想了解邮递员生成的代码与Fiddler生成的代码之间有什么区别。

这是从Fiddler生成的代码,它的工作原理是:

            HttpWebRequest request = 
            (HttpWebRequest)WebRequest.Create("http://x.x.x.x.x");

            request.Accept = "*/*";
            request.KeepAlive = true;

            request.Method = "POST";
            request.ServicePoint.Expect100Continue = false;

            byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
            request.ContentLength = postBytes.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(postBytes, 0, postBytes.Length);
            stream.Close();
            response = (HttpWebResponse)request.GetResponse();

这是从Postman生成的代码(稍作改动,但仍然从Postman生成的代码不起作用,我不认为所做的更改会干扰结果),而无法使用RestSharp :

        var client = new RestClient("http://x.x.x.x.x");

        client.ConfigureWebRequest((r) =>
        {
           r.ServicePoint.Expect100Continue = false;
           r.KeepAlive = true;
        });

        var request = new RestRequest();

        request.AddXmlBody(body);
        IRestResponse response = client.Post(request);
        return response;

例如,我在RestSharp代码中尝试了很多事情,例如添加具有不同内容类型和编码的标头

     request.AddHeader("Content-Type", "text/xml;charset=utf-8");

但无济于事。当被RestSharp代码占用时,来自api的响应说它得到了NPE错误,我相信这意味着NullPointerException,但是由于api通过邮递员和Fiddler生成的代码工作得很好,我认为这不是问题在API中。顺便说一句,代码中的参数主体在两个代码中完全相同。

c# postman fiddler restsharp
1个回答
0
投票

似乎请求主体与API预期的内容类型不匹配。如果内容与API期望的内容类型不匹配,则可能会出现NPE错误。

在提琴手生成的代码中,您正在将XML字符串作为文本发送。

请添加以下代码:

request.AddHeader("Content-Type", "text/plain");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);

request.AddHeader("Content-Type", "application/xml");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);

代替

request.AddXmlBody(body);

© www.soinside.com 2019 - 2024. All rights reserved.