隐藏

asp.net 使用HttpModule对接收到的参数值进行修改

发布:2021/8/27 9:35:13作者:管理员 来源:本站 浏览次数:1026

配置方法:

    <httpModules>

     <add name="FileEditModule" type="Framework.FileEditModule, Framework" />


   </httpModules>


   public class FileEditModule : System.Web.IHttpModule

       {

           public void Dispose() { }

   

           public void Init(HttpApplication application)

           {

               application.BeginRequest

                 += new EventHandler(Application_BeginRequest);

           }

   

           

   

   

           public void Application_BeginRequest(object sender, EventArgs e)

           {

   

               HttpContext context = HttpContext.Current;

               HttpRequest request = context.Request;

   

               if (context.Request.HttpMethod != "POST")

               {

                   return;

               }

               var file = request.InputStream;

   

               StreamReader sr = new StreamReader(file);

   

               string SourceCode2 = sr.ReadToEnd();

               file.Seek(0, SeekOrigin.Begin);

   

               string SourceCode = ..修改方法(SourceCode2);

               if (SourceCode.Equals(SourceCode2))

               {

                   return;

               }

               byte[] sourceData = System.Text.Encoding.UTF8.GetBytes(SourceCode);

   

   

               //((System.Web.HttpInputStream)(file))._data._data

               //((System.Web.HttpInputStream)(file))._data {System.Web.HttpRawUploadedContent} System.Web.HttpRawUploadedContent

               BindingFlags bind = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.GetField;

               //Assembly systemWeb = Assembly.Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

               Assembly systemWeb = Assembly.GetAssembly(typeof(HttpRequest));

               Type type = systemWeb.GetType("System.Web.HttpInputStream");

               FieldInfo method = type.GetField("_data", bind);

               var data = method.GetValue(request.InputStream);

               var _data = data.GetType().GetField("_data", bind);

               var _length = data.GetType().GetField("_length", bind);

               var _expectedLength = data.GetType().GetField("_expectedLength", bind);

               var _completed = data.GetType().GetField("_completed", bind);

               var _dataValue = _data.GetValue(data) as byte[];

               //


               _data.SetValue(data, sourceData);

               _length.SetValue(data, sourceData.Length);

               _expectedLength.SetValue(data, sourceData.Length);

               _completed.SetValue(data, true);

           }

       }