【问题标题】:Can we use Microsoft.AspNet.WebApi.Client from an ASP.NET Core application?我们可以从 ASP.NET Core 应用程序中使用 Microsoft.AspNet.WebApi.Client 吗?
【发布时间】:2016-09-11 01:47:36
【问题描述】:

我们希望能够使用 ASP.NET Core MVC Web 应用程序中的包 Microsoft.AspNet.WebApi.Client 对外部系统进行 HTTP 调用。它确实有效,但我在 .NET core (github) 中找不到相应的源代码。从 ASP.NET 路线图的角度来看,可以使用这个库吗? ASP.NET Core 以后会支持它吗?最重要的是,作为 ASP.NET Core/.NET Core 的一部分,非 Windows 平台是否支持此包?

【问题讨论】:

  • 这是一个很好的问题。我也会对答案非常感兴趣。

标签: asp.net-core


【解决方案1】:

您可以尝试我为 REST 客户端所做的操作。我发现你在最新版本中提到的程序集在最近发布的 ASP.Net Core 1.0 中不起作用。代替"Microsoft.AspNet.WebApi.Client",使用"System.Net.Http"

那么你会在哪里构建一个像这样的 Http POST 请求:

using AvailabilityPricingClient.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AvailabilityPricingClient.Core.Model;
using System.Net.Http;
using System.Net.Http.Headers;

namespace AvailabilityPricingClient.Client
{
    public class ProductAvailabilityPricing : IProductAvailabilityPricing
    {
        private HttpClient _client;
        public ProductAvailabilityPricing(string apiUrl)
        {
            _client = new HttpClient();
            _client.BaseAddress = new Uri(apiUrl);
            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        }

        public void Dispose()
        {
            _client.Dispose();
        }


        public async Task<IEnumerable<Availablity>> GetAvailabilityBySkuList(IEnumerable<string> skuList)
        {
            HttpResponseMessage response = _client.PostAsJsonAsync("/api/availabilityBySkuList", skuList).Result;

            if (response.IsSuccessStatusCode)
            {
                var avail = await response.Content.ReadAsAsync<IEnumerable<Availablity>>();
                return avail;
            }

            return null;
        }
    }
}

您现在将像这样构建:

using AvailabilityPricingClient.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AvailabilityPricingClient.Core.Model;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;

namespace AvailabilityPricingClient.Client
{
    public class ProductAvailabilityPricing : IProductAvailabilityPricing
    {
        private HttpClient _client;
        public ProductAvailabilityPricing(string apiUrl)
        {
            _client = new HttpClient();
            _client.BaseAddress = new Uri(apiUrl);
            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        }

        public void Dispose()
        {
            _client.Dispose();
        }

        public async Task<IEnumerable<Availablity>> GetAvailabilityBySkuList(IEnumerable<string> skuList)
        {
            var output = JsonConvert.SerializeObject(skuList);
            HttpContent contentPost = new StringContent(output, System.Text.Encoding.UTF8, "application/json");
            HttpResponseMessage response = _client.PostAsync("/api/availabilityBySkuList", contentPost).Result;

            if (response.IsSuccessStatusCode)
            {
                var avail = await response.Content.ReadAsStringAsync()
                    .ContinueWith<IEnumerable<Availablity>>(postTask =>
                    {
                        return JsonConvert.DeserializeObject<IEnumerable<Availablity>>(postTask.Result);
                    });
                return avail;
            }

            return null;
        }
    }
}

这种方式你的界面不会只改变你的请求代码的主体。

这对我有用....祝你好运....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多