【问题标题】:500 Server Error when calling REST API over HTTPS通过 HTTPS 调用 REST API 时出现 500 服务器错误
【发布时间】:2015-03-25 16:45:37
【问题描述】:

我正在使用此代码将 XML 发布到 REST Web 服务,但我只是收到一个模糊的“500 服务器错误”。如果我将相同的 XML 粘贴到 Fiddler 中,它可以完美运行,那么我做错了什么?

using (var client = new HttpClient())
{
   var httpContent = new StringContent(doc.ToString(), Encoding.UTF8, "text/xml");
   var response = client.PostAsync(new Uri("httpsapiurl"),httpContent).Result;
   if (response.IsSuccessStatusCode)
   {
       // EDITED: this isn't hit as IsSuccessStatusCode is always false
       //Stream stream = await response.Content.ReadAsStreamAsync();
   }
}

【问题讨论】:

  • 所以这看起来像是一个范围问题,这意味着当您尝试访问 streamr 变量时,它超出了 if 语句的范围......你调试过这个......
  • @MethodMan - 抱歉,该代码具有误导性,因为条件 never == true

标签: c# xml rest fiddler dotnet-httpclient


【解决方案1】:

可能是您需要在请求中设置内容类型吗?

try
{
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));
    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, URL);
    req.Content = new StringContent(doc.ToString(), Encoding.UTF8, "text/xml");
    await httpClient.SendAsync(req).ContinueWith(async respTask =>
    {
        Debug.WriteLine(req.Content.ReadAsStringAsync());
    };
}
catch (Exception ex) 
{ 
}

尤其是这条线很重要。当没有正确设置 Content-Type 标头时,我遇到了一个 API 拒绝吐出任何内容的类似问题。

 req.Content = new StringContent(doc.ToString(), Encoding.UTF8, "text/xml");

不知道有没有用。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2013-08-19
    • 2020-06-17
    • 2015-07-05
    相关资源
    最近更新 更多