Peter Bronc
Peter Bronc

Reputation: 91

Can we use Microsoft.AspNet.WebApi.Client from an ASP.NET Core application?

We want to be able to use the package Microsoft.AspNet.WebApi.Client from our ASP.NET Core MVC web application to make an HTTP call to an outside system. It does work but I couldn't find the corresponding source code in .NET core (github). Is it okay to use this library from the ASP.NET road map point of view? Will it be supported in ASP.NET Core going forward? Most importantly, will this package be supported in non-Windows platforms, as part of ASP.NET Core/.NET Core?

Upvotes: 9

Views: 3179

Answers (1)

Irv Lennert
Irv Lennert

Reputation: 555

You can try what I did for a REST Client. I found that the assembly you have mentioned in it's latest version does not work in the recently released ASP.Net Core 1.0. Instead of "Microsoft.AspNet.WebApi.Client", use "System.Net.Http".

Then where you would have built an Http POST request like this:

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

You will now build like this:

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

This way you interface does not change only the body of your request code changes.

This is working for me....Good luck....

Upvotes: 5

Related Questions