So, with that said, let me introduce you to InspectorHandler for Windows Store apps.
It’s simple really - InspectorHandler is a MessageProcessingHandler that you can add to your HttpClient definition that outputs the request & response from the HttpClient to the debug output window when you’re in debug configuration.
Usage is really straight forward:
- Hook up the handler
- Create the HttpClient
- You’re set.
private async void btnGo_Click_1(object sender, RoutedEventArgs e) { // declare http handler HttpMessageHandler handler = new HttpClientHandler(); // append the Inspector handler handler = new InspectorHandler(handler); // allocate a http client on the above handlers var client = new HttpClient(handler) { BaseAddress = new System.Uri("http://dev.virtualearth.net/REST/v1/Locations/") }; // fire request var response = await client.GetAsync("Eiffel%20Tower?o=xml&key=BingMapsKey"); // insert a proper bing maps key here otherwise you'll just get the access denied view.. // output result tbContent.Text = await response.Content.ReadAsStringAsync(); }Below is a screenshot of a example app that once the button is pressed fires a GET request to the http://dev.virtualearth.net/REST/v1/Locations/Eiffel%20Tower?o=xml&key=BingMapsKey url and ouputs the result into a textbox.
And some basic interesting details from the request & response objects are now available in the ouput of the debugger:
There you have it. Simple, fairly effective and perhaps useful. Under the hood the InspectorHandler is far from a work of art, but it does the job quite well for being a simple debug tool. Here’s the complete source code:
public class InspectorHandler : MessageProcessingHandler { public InspectorHandler(HttpMessageHandler innerHandler) : base(innerHandler) { } protected override HttpRequestMessage ProcessRequest(HttpRequestMessage request, CancellationToken cancellationToken) { #if DEBUG if (request.Content!=null) { var content = request.Content.ReadAsStringAsync(); content.Wait(); Debug.WriteLine(string.Format("INSPECTOR: {0} REQUEST - {1} - {2}", request.Method, request.RequestUri.ToString(), content.Result)); } else { Debug.WriteLine(string.Format("INSPECTOR: {0} REQUEST - {1}", request.Method, request.RequestUri.ToString())); } #endif return request; } protected override HttpResponseMessage ProcessResponse(HttpResponseMessage response, CancellationToken cancellationToken) { #if DEBUG if (response.Content!=null) { var content = response.Content.ReadAsStringAsync(); content.Wait(); Debug.WriteLine(string.Format("INSPECTOR: {0} RESPONSE - {1} - {2}", response.RequestMessage.Method, response.StatusCode, content.Result)); } else { Debug.WriteLine(string.Format("INSPECTOR: {0} RESPONSE - {1} - {2}", response.RequestMessage.Method, response.StatusCode)); } #endif return response; } }If you want it, you can grab it here as a zip containing the class library project ready to be compiled & referenced.
No comments:
Post a Comment