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

问题描述:

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

+0

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

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

这样你的界面不会改变只是身体的请求代码更改。

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