我们可以使用ASP.NET Core应用程序中的Microsoft.AspNet.WebApi.Client吗?

时间:2016-05-15 03:05:00

标签: asp.net-core

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

1 个答案:

答案 0 :(得分:5)

您可以尝试我为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;
        }
    }
}

这样,您的界面不会仅更改请求代码更改的正文。

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