【问题标题】:Using HttpClient in new WebApi project在新的 WebApi 项目中使用 HttpClient
【发布时间】:2016-07-11 21:53:32
【问题描述】:

我创建了一个新的 Webapi2 项目,我正在尝试使用此代码调用外部 Web 服务:

WebServiceAuthResult authResult = new WebServiceAuthResult();
using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
    try
    {
        var response = await httpClient.PostAsync(url, null);

        var responseContent = await response.Content.ReadAsStringAsync();
        authResult = JsonConvert.DeserializeObject<WebServiceAuthResult>(responseContent);
    }
    catch (Exception ex)
    {
    }
}

我收到此错误:

无法从传输连接读取数据:现有连接被远程主机强行关闭。

我在 UWP 项目中使用了完全相同的代码,它运行良好 - 所以我猜我的项目设置有问题。

我查看了 Google 和其他有关此问题的 StackOverflow 问题,但它们都表明 Web 服务存在问题 - 但我知道这是有效的,因为我可以使用我的 UWP 项目进行测试。

任何人都可以建议我尝试一下吗?

【问题讨论】:

  • 如果代码在本地工作,但在部署的服务器上不起作用,则可能与部署服务器的策略有关。
  • 您的服务是如何部署的?如果它是自托管的,问题可能出在服务使用的帐户上:msdn.microsoft.com/en-us/library/…
  • 我现在只是在本地测试。我的 UWP 应用也使用 Windows Phone 模拟器在本地运行。我不知道我正在调用的 Web 服务是如何设置的
  • 您是否在您的网络服务器上启用了基本身份验证?如果您使用 IISExpress 进行测试,请执行 here 中提到的说明。如果您使用的是 IIS 7,请使用 this one

标签: c# web-services asp.net-web-api


【解决方案1】:

与这些问题的通常情况一样,答案是一条线,但需要 4 小时才能解决!

通过添加这行代码连接到网络服务是成功的:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

我已经在using 语句中添加了代码,但我认为它只需要一次,所以如果有人能告诉我哪里是添加此代码的最佳位置以及为什么我在我的 WebApi 项目而不是我的 @ 987654323@项目?

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2020-12-22
    • 2018-09-26
    相关资源
    最近更新 更多