C# 为什么此请求使用HttpWebRequest而不使用RestSharp?

C# 为什么此请求使用HttpWebRequest而不使用RestSharp?,c#,postman,fiddler,restsharp,C#,Postman,Fiddler,Restsharp,我正在使用一个API,该API要求在主体请求中包含XML。首先,我通过Postman使用了api,它工作了,然后我使用Postman的工具将请求转换为RestCharp C#code,然后使用该代码,我收到的响应与Postman不同。在那之后,我使用Fiddler通过postman请求生成c#代码,并使用Fiddler生成的代码,我能够通过代码成功地使用API。我只是想了解postman生成的代码和Fiddler生成的代码之间的区别 这是由Fiddler生成的代码,它可以工作:

我正在使用一个API,该API要求在主体请求中包含XML。首先,我通过Postman使用了api,它工作了,然后我使用Postman的工具将请求转换为RestCharp C#code,然后使用该代码,我收到的响应与Postman不同。在那之后,我使用Fiddler通过postman请求生成c#代码,并使用Fiddler生成的代码,我能够通过代码成功地使用API。我只是想了解postman生成的代码和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,但是由于通过postman和Fiddler生成的代码,api工作得很好,我认为问题不在api中。顺便说一句,代码中的参数体在两个代码中完全相同。

看起来请求体与API预期的内容类型不匹配。当内容与API预期的内容类型不匹配时,可能会出现NPE错误

在fiddler生成的代码中,您将XML字符串作为文本发送

请添加以下代码:

request.AddHeader("Content-Type", "text/plain");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);
request.AddHeader(“内容类型”、“文本/普通”);
request.AddParameter(“未定义”,“参数类型.RequestBody”);

request.AddHeader(“内容类型”、“应用程序/xml”);
request.AddParameter(“未定义”,“参数类型.RequestBody”);
而不是

请求。AddXmlBody(body)


示例中的
body
是字符串吗?我相信它可能试图序列化您的原始xml。body是一个XDocument,我尝试以XDocument和ToString()作为字符串传递,但都没有成功。谢谢!在用你的第一个技巧修改代码后,我成功地使用了api!
request.AddHeader("Content-Type", "application/xml");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);