Last active
January 1, 2016 14:59
-
-
Save Recodify/8161428 to your computer and use it in GitHub Desktop.
The following extension method on HttpRequest will create a string that can be pasted into fiddler (or used in a curl request) and replayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace System.Web | |
{ | |
using System.IO; | |
/// <summary> | |
/// Extension methods for HTTP Request. | |
/// <remarks> | |
/// See the HTTP 1.1 specification http://www.w3.org/Protocols/rfc2616/rfc2616.html | |
/// for details of implementation decisions. | |
/// </remarks> | |
/// </summary> | |
public static class HttpRequestExtensions | |
{ | |
/// <summary> | |
/// Dump the raw http request to a string. | |
/// </summary> | |
/// <param name="request">The <see cref="HttpRequest"/> that should be dumped. </param> | |
/// <returns>The raw HTTP request.</returns> | |
public static string ToRaw(this HttpRequest request) | |
{ | |
StringWriter writer = new StringWriter(); | |
WriteStartLine(request, writer); | |
WriteHeaders(request, writer); | |
WriteBody(request, writer); | |
return writer.ToString(); | |
} | |
private static void WriteStartLine(HttpRequest request, StringWriter writer) | |
{ | |
const string SPACE = " "; | |
writer.Write(request.HttpMethod); | |
writer.Write(SPACE + request.Url); | |
writer.WriteLine(SPACE + request.ServerVariables["SERVER_PROTOCOL"]); | |
} | |
private static void WriteHeaders(HttpRequest request, StringWriter writer) | |
{ | |
foreach (string key in request.Headers.AllKeys) | |
{ | |
writer.WriteLine(string.Format("{0}: {1}", key, request.Headers[key])); | |
} | |
writer.WriteLine(); | |
} | |
private static void WriteBody(HttpRequest request, StringWriter writer) | |
{ | |
StreamReader reader = new StreamReader(request.InputStream); | |
try | |
{ | |
string body = reader.ReadToEnd(); | |
writer.WriteLine(body); | |
} | |
finally | |
{ | |
reader.BaseStream.Position = 0; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment