2016-05-15 7 views
9

ASP.NET Core MVC WebアプリケーションのパッケージMicrosoft.AspNet.WebApi.Clientを使用して、外部システムへのHTTP呼び出しを可能にしたいと考えています。それは動作しますが、私は.NETコア(github)で対応するソースコードを見つけることができませんでした。 ASP.NETロードマップの観点からこのライブラリを使用するのは大丈夫ですか?今後、ASP.NETコアでサポートされる予定ですか?最も重要なのは、このパッケージはASP.NET Core/.NET Coreの一部として、Windows以外のプラットフォームでもサポートされることでしょうか?ASP.NET CoreアプリケーションからMicrosoft.AspNet.WebApi.Clientを使用できますか?

+0

これは大きな質問です。私もその答えに非常に興味があります。 –

答えて

5

私はRESTクライアントのために何をしたのか試すことができます。最近リリースされたASP.Net Core 1.0では、あなたが最新バージョンで言及したアセンブリが動作しないことがわかりました。 "Microsoft.AspNet.WebApi.Client"の代わりに"System.Net.Http"を使用してください。

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

あなたは、インターフェイスがあなたの本体のみを変更しません。この方法は:あなたは次のように構築していきます

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

:次に、あなたがこのようなHTTP POSTリクエストを構築しているだろう

要求コードの変更。

これは私のために働いています....幸運....

関連する問題