Browser Specific Extensions of HttpClient
- by imran_ku07
Introduction:
REpresentational State Transfer (REST) causing/leaving a great impact on service/API development because it offers a way to access a service without requiring any specific library by embracing HTTP and its features. ASP.NET Web API makes it very easy to quickly build RESTful HTTP services. These HTTP services can be consumed by a variety of clients including browsers, devices, machines, etc. With .NET Framework 4.5, we can use HttpClient class to consume/send/receive RESTful HTTP services(for .NET Framework 4.0, HttpClient class is shipped as part of ASP.NET Web API). The HttpClient class provides a bunch of helper methods(for example, DeleteAsync, PostAsync, GetStringAsync, etc.) to consume a HTTP service very easily. ASP.NET Web API added some more extension methods(for example, PutAsJsonAsync, PutAsXmlAsync, etc) into HttpClient class to further simplify the usage. In addition, HttpClient is also an ideal choice for writing integration test for a RESTful HTTP service. Since a browser is a main client of any RESTful API, it is also important to test the HTTP service on a variety of browsers. RESTful service embraces HTTP headers and different browsers send different HTTP headers. So, I have created a package that will add overloads(with an additional Browser parameter) for almost all the helper methods of HttpClient class. In this article, I will show you how to use this package.
Description:
Create/open your test project and install ImranB.SystemNetHttp.HttpClientExtensions NuGet package.
Then, add this using statement on your class,
using ImranB.SystemNetHttp;
Then, you can start using any HttpClient helper method which include the additional Browser parameter. For example,
var client = new HttpClient(myserver);
var task = client.GetAsync("http://domain/myapi", Browser.Chrome);
task.Wait();
var response = task.Result;
.
Here is the definition of Browser,
public enum Browser
{
Firefox = 0,
Chrome = 1,
IE10 = 2,
IE9 = 3,
IE8 = 4,
IE7 = 5,
IE6 = 6,
Safari = 7,
Opera = 8,
Maxthon = 9,
}
These extension methods will make it very easy to write browser specific integration test. It will also help HTTP service consumer to mimic the request sending behavior of a browser. This package source is available on github. So, you can grab the source and add some additional behavior on the top of these extensions.
Summary:
Testing a REST API is an important aspect of service development and today, testing with a browser is crucial. In this article, I showed how to write integration test that will mimic the browser request sending behavior. I also showed an example. Hopefully you will enjoy this article too.