【问题标题】:System.Net.Http.HttpClient cannot connect to web API via NSwag client (Windows Universal Platform)System.Net.Http.HttpClient 无法通过 NSwag 客户端(Windows 通用平台)连接到 Web API
【发布时间】:2020-02-23 07:05:58
【问题描述】:

我使用Swashbuckle Swagger 编写了一个简单的.Net Core 3.0 API,并通过NSwag Studio 生成了一个api 客户端,然后我将生成的Api 客户端放到了一个.Net Standard 2.0 项目中。 我有一个通用 Windows 平台应用程序,用于连接到 Web Api 并发送/接收数据等。

我在MainPage.xaml.cs 类中放了一个简单的代码,里面有System.Net.Http.HttpClient

public MainPage()
    {
        this.InitializeComponent();
        var httpClient = new HttpClient();
        var apiClient = new ApiClient(ProjectConstants.API_URL, httpClient);
        var deviceService = new DeviceService(apiClient);
    }

稍后在 deviceService 中调用 API 时,我的程序在生成的 Api 客户端中的 SendAsync 方法上抛出异常

“发送请求时出错。”

var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

我在 .Net Core 控制台应用程序上测试了 API Client 和 HttpClient,它运行良好。 我读到了 UWP https://docs.microsoft.com/en-us/windows/uwp/networking/httpclient 的 Http Client,但似乎 UWP 也应该支持 System.Net.Http.HttpClient,我很想坚持下去。 这是通用 Windows 平台错误还是我忘记向项目添加必要的内容?

【问题讨论】:

    标签: c# api http uwp nswag


    【解决方案1】:

    System.Net.Http.HttpClient API 可以跨平台使用,但我们建议使用易于使用的Windows.Web.Http.HttpClient NameSpace 的 API。所以你可以在 UWP 中使用Windows.Web.Http.HttpClient API,并使用GetAsync(PostAsync) 发送请求,例如:

    Uri requestUri = new Uri("http://www.contoso.com");
    Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient();
    Windows.Web.Http.HttpResponseMessage httpResponse = new Windows.Web.Http.HttpResponseMessage();
    httpResponse = await httpClient.GetAsync(requestUri);
    

    更多关于Windows.Web.Http和System.Net.Http.HttpClient的区别可以参考这个article

    【讨论】:

    • 好吧,“你打算编写跨平台的 .NET 代码(跨 UWP/ASP.NET 5/iOS 和 Android)吗?如果是 - 然后使用 System.Net.Http API。这允许您可以编写可以在其他 .NET 平台(例如 ASP.NET 5 和 .NET Framework 桌面应用程序)上重复使用的代码。“我应该在我的项目中坚持使用 System.Net.Http.HttpClient
    • @Hantick 为什么在已经使用 await 关键字的 SendAsync 之后添加 ConfigureAwait
    • @NicoZhu-MSFT 它是由 NSwag 自动生成的
    • @Hantick,您可以尝试删除ConfigureAwait 并再次测试吗?
    • @NicoZhu-MSFT 我到处都删除了.ConfigureAwait(false),没有效果:(
    【解决方案2】:

    它的api和便携的HttpClient一样吗?

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      相关资源
      最近更新 更多