Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# HttpWebRequest获取返回';无内容';成功后_C#_Asp.net_Httpwebrequest_Httpwebresponse_System.net - Fatal编程技术网

C# HttpWebRequest获取返回';无内容';成功后

C# HttpWebRequest获取返回';无内容';成功后,c#,asp.net,httpwebrequest,httpwebresponse,system.net,C#,Asp.net,Httpwebrequest,Httpwebresponse,System.net,我正在开发一个应用程序,它向RESTAPI发送一个帖子,RESTAPI在其响应中返回一个URI。然后,我要向该URI发出GET请求,它应该在响应体中返回HTML内容。但是,GET请求在其HTTP状态代码中返回“无内容” 奇怪的是,我有一个为测试目的而构建的小控制台应用程序,如果我将URI插入其中(允许我在不发布帖子的情况下测试GET),状态良好是200-OK,我会在主体中接收HTML内容。因此,这似乎与我在我的POST请求中正在做的事情有关。这是我的代码(敏感信息已被编辑): private P

我正在开发一个应用程序,它向RESTAPI发送一个帖子,RESTAPI在其响应中返回一个URI。然后,我要向该URI发出GET请求,它应该在响应体中返回HTML内容。但是,GET请求在其HTTP状态代码中返回“无内容”

奇怪的是,我有一个为测试目的而构建的小控制台应用程序,如果我将URI插入其中(允许我在不发布帖子的情况下测试GET),状态良好是200-OK,我会在主体中接收HTML内容。因此,这似乎与我在我的POST请求中正在做的事情有关。这是我的代码(敏感信息已被编辑):

private PersonReportResults POSTReportRequest(PersonReportRequest报告请求)
{
var personReportResults=新的personReportResults();
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“https://xxxxxxxxx.com/api/v1/personReport/reportResults");
var xDoc=new XmlDocument();
var serializedXml=Serialize(reportRequest);
LoadXml(序列化dxml);
var bytes=Encoding.ASCII.GetBytes(xDoc.OuterXml);
request.ContentType=“application/xml;encoding='utf-8';
request.ContentLength=字节.Length;
request.Method=“POST”;
request.KeepAlive=true;
request.Credentials=newnetworkcredential(ConfigurationManager.AppSettings[“xxxxx userid”]、ConfigurationManager.AppSettings[“xxxxx password”]);
request.ClientCertificates.Add(GetClientCertificate());
Stream requestStream=request.GetRequestStream();
requestStream.Write(字节、0、字节、长度);
requestStream.Close();
使用(var response=(HttpWebResponse)request.GetResponse())
{
if(response.StatusCode==HttpStatusCode.OK)
{
var responseStream=response.GetResponseStream();
使用(MemoryStream ms=new MemoryStream())
{
var计数=0;
做
{
字节[]buf=新字节[1024];
count=responseStream.Read(buf,0,1024);
ms.Write(buf,0,计数);
}while(responseStream.CanRead&&count>0);
ms.Position=0;
//现在尝试从内存流中取消序列化
var serializer=新的XmlSerializer(typeof(PersonReportResults));
personReportResults=((personReportResults)序列化程序.反序列化(ms));
}
response.Close();
}
request.Abort();
}
返回人员报告结果;
}
/// 
///对报告HTML发出HTTP GET请求
/// 
///URI。
///串
私有静态字符串GETResults(字符串uri)
{
var responseHTML=string.Empty;
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(uri+“?reportType=html”);
//request.ContentType=“application/xml;encoding='utf-8';
request.Method=“GET”;
request.Credentials=newnetworkcredential(ConfigurationManager.AppSettings[“xxxxx userid”]、ConfigurationManager.AppSettings[“xxxxx password”]);
request.ClientCertificates.Add(GetClientCertificate());
使用(var response=(HttpWebResponse)request.GetResponse())
{
if(response.StatusCode==HttpStatusCode.OK)
{
尝试
{
使用(var stream=response.GetResponseStream())
{
if(流!=null)
{
使用(MemoryStream ms=new MemoryStream())
{
var计数=0;
做
{
字节[]buf=新字节[1024];
count=stream.Read(buf,0,1024);
ms.Write(buf,0,计数);
}而(stream.CanRead&&count>0);
ms.Position=0;
var sr=新的StreamReader(毫秒);
responseHTML=sr.ReadToEnd();
}
//var reader=新的StreamReader(stream,Encoding.UTF8);
//responseHTML=reader.ReadToEnd();
}
}
}
捕获(例外e)
{
}
request.Abort();
}
else if(response.StatusCode==HttpStatusCode.Accepted)
{
response.Close();
var tryCount=1;
while(tryCount<5)
{
使用(var retryResponse=(HttpWebResponse)request.GetResponse())
{
if(retryResponse.StatusCode==HttpStatusCode.OK)
{
使用(var stream=retryResponse.GetResponseStream())
{
if(流!=null)
{
var reader=新的StreamReader(stream,Encoding.UTF8);
responseHTML=reader.ReadToEnd();
}
}
}
}
tryCount++;
睡眠(10000);
}
}
}
返回响应TML;
}

您是否尝试过使用类似Fiddler的工具来检查控制台应用程序和实际代码的HTTP请求?如果您在POST之后的GET调用中得到204,那么204仍然被认为是成功的——可能只是数据尚未完全写入。试着在第一次发帖之后,在开始发帖之前睡一觉。我还建议您尝试使用Fiddler或Runscope()之类的工具来调试它。使用Runscope,您不必安装任何东西——只需修改URL,使其通过Runscope进行代理,您就可以查看实时流量流(完整的请求和响应数据)。这里的文档:您是否尝试过使用som
private PersonReportResults POSTReportRequest(PersonReportRequest reportRequest)
{
    var personReportResults = new PersonReportResults();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://xxxxxxxxx.com/api/v1/personReport/reportResults");

    var xDoc = new XmlDocument();
    var serializedXml = Serialize(reportRequest);
    xDoc.LoadXml(serializedXml);

    var bytes = Encoding.ASCII.GetBytes(xDoc.OuterXml);
    request.ContentType = "application/xml; encoding='utf-8'";
    request.ContentLength = bytes.Length;
    request.Method = "POST";
    request.KeepAlive = true;
    request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["XXXXXUserId"], ConfigurationManager.AppSettings["XXXXXPassword"]);
    request.ClientCertificates.Add(GetClientCertificate());

    Stream requestStream = request.GetRequestStream();

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

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            var responseStream = response.GetResponseStream();
            using (MemoryStream ms = new MemoryStream())
            {
                var count = 0;
                do
                {
                    byte[] buf = new byte[1024];
                    count = responseStream.Read(buf, 0, 1024);
                    ms.Write(buf, 0, count);
                } while (responseStream.CanRead && count > 0);
                ms.Position = 0;

                // now attempt to desrialize from the memory stream
                var serializer = new XmlSerializer(typeof(PersonReportResults));
                personReportResults = ((PersonReportResults)serializer.Deserialize(ms));
            }
            response.Close();
        }
        request.Abort();
    }
    return personReportResults;
}

/// <summary>
/// Makes a HTTP GET request for the report HTML
/// </summary>
/// <param name="uri">The URI.</param>
/// <returns>string</returns>
private static string GETResults(string uri)
{
    var responseHTML = string.Empty;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + "?reportType=html");

    //request.ContentType = "application/xml; encoding='utf-8'";
    request.Method = "GET";
    request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["XXXXXUserId"], ConfigurationManager.AppSettings["XXXXXPassword"]);
    request.ClientCertificates.Add(GetClientCertificate());

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            try
            {
                using (var stream = response.GetResponseStream())
                {
                    if (stream != null)
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            var count = 0;
                            do
                            {
                                byte[] buf = new byte[1024];
                                count = stream.Read(buf, 0, 1024);
                                ms.Write(buf, 0, count);
                            } while (stream.CanRead && count > 0);
                            ms.Position = 0;

                            var sr = new StreamReader(ms);
                            responseHTML = sr.ReadToEnd();
                        }
                        //var reader = new StreamReader(stream, Encoding.UTF8);
                        //responseHTML = reader.ReadToEnd();
                    }
                }
            }
            catch (Exception e)
            {
            }
            request.Abort();
        }
        else if (response.StatusCode == HttpStatusCode.Accepted)
        {
            response.Close();

            var tryCount = 1;
            while (tryCount < 5)
            {
                using (var retryResponse = (HttpWebResponse)request.GetResponse())
                {
                    if (retryResponse.StatusCode == HttpStatusCode.OK)
                    {
                        using (var stream = retryResponse.GetResponseStream())
                        {
                            if (stream != null)
                            {
                                var reader = new StreamReader(stream, Encoding.UTF8);
                                responseHTML = reader.ReadToEnd();
                            }
                        }
                    }
                }
                tryCount++;
                Thread.Sleep(10000);
            }
        }
    }
    return responseHTML;
}