var web = Assembly.GetAssembly(typeof(System.Web.HttpRequest));
var parserType = web.GetType("System.Web.HttpMultipartContentTemplateParser", true, true);
var inject = new Njector(parserType);
inject.After("GetNextLine", null, delegate(object target, MethodBase method, object[] parameters, object retValue) {
Console.WriteLine("GetNextLine: {0}", retValue);
Console.WriteLine("Pos={0}", target.GetPrivateField("_pos"));
Console.WriteLine("line={0}", target.GetPrivateField("_lineStart"));
Console.WriteLine("partDataStart={0}", target.GetPrivateField("_partDataStart"));
});
inject.After("AtBoundaryLine", null, delegate(object target, MethodBase method, object[] parameters, object retValue) {
Console.WriteLine("AtBoundaryLine: {0}", retValue);
});
inject.After("AtEndOfData", null, delegate(object target, MethodBase method, object[] parameters, object retValue) {
Console.WriteLine("AtEndOfData: {0}", retValue);
});
inject.After("ParsePartHeaders", null, delegate( object target, MethodBase method,object[] parameters, object retValue) {
Console.WriteLine("ParsePartHeaders");
});
inject.Before("ParsePartData", null, delegate(object target, MethodBase method, object[] parameters, object retValue) {
Console.WriteLine("ParsePartData Before");
Console.WriteLine("Pos={0}", target.GetPrivateField("_pos"));
Console.WriteLine("line={0}", target.GetPrivateField("_lineStart"));
//System.Diagnostics.Debugger.Break();
});
inject.After("ParsePartData", null, delegate(object target, MethodBase method, object[] parameters, object retValue) {
Console.WriteLine("ParsePartData After");
Console.WriteLine("Pos={0}", target.GetPrivateField("_pos"));
Console.WriteLine("line={0}", target.GetPrivateField("_lineStart"));
Console.WriteLine("partDataLength={0}", target.GetPrivateField("_partDataLength"));
});
//Prepare the data
//Do the POST
//The framework creates an instance of System.Web.HttpMultipartContentTemplateParser and calls its ParseIntoElementList method,
//which in turn calls the methods like GetNextLine, AtBoundaryLine, etc.
//After the GetNextLine method is called, our code is executed, and we're able to see the result.