在C#中执行post请求会导致奇怪的输出

在C#中执行post请求会导致奇怪的输出,c#,json,rest,webclient,C#,Json,Rest,Webclient,我正在向几家服务器发帖。这些服务器返回除一个以外的所有json。其中一个返回如下数据:1FE280B9 0800 0000 0400 c3ac c2bd 如果我对rest客户机执行相同的操作,我会从所有服务器获得有效的Json,但当我在c#中执行此操作时,其中一个服务器会返回此类数据 我使用以下代码来执行此操作: public static string MakeRequest(string url, string requestBody, string methodName)

我正在向几家服务器发帖。这些服务器返回除一个以外的所有json。其中一个返回如下数据:1FE280B9 0800 0000 0400 c3ac c2bd

如果我对rest客户机执行相同的操作,我会从所有服务器获得有效的Json,但当我在c#中执行此操作时,其中一个服务器会返回此类数据

我使用以下代码来执行此操作:

public static string MakeRequest(string url, string requestBody, string methodName)
        {
            string result = "";
            using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
                result = client.UploadString(string.Format("{0}{1}", url, methodName), "POST", requestBody);
            }
            return result;
        }
我还尝试了以下(旧代码):


我不能真正给你服务器URL,因为它们是私有的。有人知道我为什么要获取这些数据而不是有效的json吗?

嗨,请在您的机器中安装fiddler工具,然后检查REST客户端生成的请求头。并捕获.net客户端生成的请求头。然后比较两种请求格式以找到解决方案

您可能需要将用户代理和主机添加到请求的标头中。最近,我使用了一个web服务,如果没有适当的用户代理,它无法处理请求。获取profiler,查看在这两种情况下发送到服务器的内容,您将能够看到差异。实际上,您可能需要添加更多的头,尽管我不确定是哪个头。有关列表,请参见此处:您也可以尝试使用。选中此选项,它可能是一个GZIP文件。当客户端和服务器建立HTTP连接时,使用头进行协商。服务器上使用的模式似乎与其他模式不同。协商模式位于响应的标题中。因此,我将比较好响应和坏响应中的头。使用fiddler是获取响应标题的一种方法。请在评论部分中执行此操作。这不能算是一个答案。
public static string MakeRequestA(string url, string requestBody, string methodName)
        {
            byte[] postBytes        = Encoding.ASCII.GetBytes(requestBody);

            var request     = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", url, methodName));
            request.KeepAlive       = false;
            request.ProtocolVersion = HttpVersion.Version11;
            request.Method          = "POST";
            request.ContentType     = "application/json";
            request.Accept          = "text/plain";
            request.ContentLength   = postBytes.Length;

            Stream requestStream = request.GetRequestStream();

            requestStream.Write(postBytes, 0, postBytes.Length);
            requestStream.Close();

            WebResponse response = request.GetResponse();  
            Console.WriteLine (((HttpWebResponse)response).StatusDescription);  

            var dataStream = response.GetResponseStream ();
            var reader = new StreamReader (dataStream);  
            string responseFromServer = reader.ReadToEnd ();  

            reader.Close ();  
            dataStream.Close ();  
            response.Close ();  
            return responseFromServer;
        }