2016-05-15 2 views
9

Мы хотим иметь возможность использовать пакет Microsoft.AspNet.WebApi.Client из нашего веб-приложения ASP.NET Core MVC, чтобы сделать HTTP-вызов внешней системе. Он работает, но я не смог найти соответствующий исходный код в ядре .NET (github). Можно ли использовать эту библиотеку с точки зрения дорожной карты ASP.NET? Будет ли она поддерживаться в ASP.NET Core в будущем? Самое главное, будет ли этот пакет поддерживаться на платформах, отличных от Windows, как часть ядра ASP.NET Core/.NET?Можем ли мы использовать Microsoft.AspNet.WebApi.Client из приложения ASP.NET Core?

+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; 
     } 
    } 
} 

Таким образом, вы интерфейс не меняется только тело вашего запросить изменения кода.

Это работает для меня .... Удачи ....

Смежные вопросы