HttpClient.PostAsync无法识别的响应

时间:2016-06-03 15:28:47

标签: c# curl dotnet-httpclient dnx

如果我在Windows机器上运行我的Web应用程序,一切正常。当我在Linux(CentOS)机器上运行此应用程序时,我在尝试时发出以下异常,请发送Post请求:

  

System.Net.Http.HttpRequestException:服务器返回无效或无法识别的响应。 System.Net.Http.CurlResponseHeaderReader.ReadHeader(String& headerName,String& headerValue)at System.Net.Http.CurlHandler.MultiAgent.CurlReceiveHeadersCallback(IntPtr buffer,UInt64 size,UInt64 nitems,IntPtr context)---栈尾从抛出异常的先前位置追踪---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)中

这是发布帖子的代码:

    Uri uri = new Uri(ServiceConfiguration.SERVICE_URL);

    string sSOAPResponse = String.Empty;

    HttpClient hc = new HttpClient();

    hc.DefaultRequestHeaders.Add("SOAPAction", oRequest.Action);

    var content = new StringContent(oRequest.RequestMessage, Encoding.UTF8, "text/xml");

    try
    {
        using (HttpResponseMessage response = await hc.PostAsync(uri, content))
        {

            sSOAPResponse = await response.Content.ReadAsStringAsync();
            (...)
         }

由于我的标题定义,我猜测这种情况正在发生。我也尝试在linux控制台上使用curl发出请求,我得到了预期的响应。我是否对标题定义做错了什么?

与sucess(Source

一起使用的CURL命令示例
  

curl --header" Content-Type:text / xml; charset = UTF-8" --header" SOAPAction:ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT

SOAP UI请求(RAW):

  

POST http://xxx/xxx/xxx.php HTTP / 1.1 Accept-Encoding:gzip,deflate   Content-Type:text / xml; charset = UTF-8 SOAPAction:   " http://xxx/xxx/xxx.php/userLogin"内容长度:488主机:xxx   连接:Keep-Alive User-Agent:Apache-HttpClient / 4.1.1(java 1.5

1 个答案:

答案 0 :(得分:2)

好吧,我们已经通过GitHub上的DNX团队解决了这个问题。我已经在link上创建了一个说明问题的帖子。

这就是我所做的:

  • 我在CentOS服务器上运行了PHP(NuSOAP)API。我发送了这个显示PHP头信息的命令。
  

[root @ su soaptest] #curl -I http://application.com/api/service.php

     

HTTP / 1.1 200 OK日期:星期二,07六月2016 01:21:20 GMT服务器:   Apache / 2.4.6(CentOS)X-Powered-By:PHP / 5.4.16   Access-Control-Allow-Headers:SOAPAction,Content-Type   Access-Control-Allow-Origin:*访问控制允许 - 方法:   POST,GET,OPTIONS连接:关闭Content-Type:text / html;   字符集= UTF-8

问题是在我的主PHP API页面(我的案例service.php)中找到的(:)上的空白区域

  

Access-Control-Allow-Methods:POST,GET,OPTIONS

应该是:

  

Access-Control-Allow-Methods:POST,GET,OPTIONS

如果你在Windows机器上运行该应用程序,它仍然可以在上面的链接上查看整个问题,这仍然可以正确读取标题(有或没有空格)。他们现在已经创建了一个问题,所以这也可以在linux机器上实现。

谢谢。

相关问题