1

使用 C# 我想控制从 POST 读取 HTTP 请求。主要是读取multipart/form-data文件上传的流以跟踪从客户端接收到的流。

使用ProcessRequest或 AsyncBeginProcessRequest正文已经被 ASP.net / IIS 解析。

有没有办法通过 HTTPHandler 覆盖内置读取,还是我必须使用另一种机制?

非常感谢

安迪

更新- 根据要求添加了代码示例,尽管与实现 IHttpHandler 的普通类没有什么不同

public class MyHandler : IHttpHandler
{

    public bool IsReusable { get { return true; } }

    public void ProcessRequest(HttpContext context)
    {
        // The body has already been received by the server
        // at this point.  

        // I need a way to access the stream being passed 
        // from the Client directly, before the client starts 
        // to actually send the Body of the Request.

    }

}
4

2 回答 2

1

看来您可以通过context.BeginRequestHttpModule 的事件来捕获流。

例如 :

public class Test : IHttpModule
{

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(onBeginRequest);
    }


    public void onBeginRequest(object sender, EventArgs e)
    {
        HttpContext context = (sender as HttpApplication).Context;
        if( context == nul ) { return; }

        if (context.Request.RawUrl.Contains("test-handler.ext"))
        {
            Logger.SysLog("onBeginRequest");
            TestRead(context);
        }

    }

    // Read the stream
    private static void TestRead(HttpContext context)
    {
        using (StreamReader reader = new StreamReader(context.Request.GetBufferlessInputStream()))
        {
            Logger.SysLog("Start Read");
            reader.ReadToEnd();
            Logger.SysLog("Read Completed");
        }
    }
}

真的我试图避免使用 HttpModules,因为它们是针对每个 .net 请求进行处理的,所以我真的很想知道如何通过 HTTPHandler 来完成它。

于 2012-09-05T10:48:01.253 回答
-1

您绝对可以通过实现 IHttpHandler 来做到这一点。

这个例子会让你开始。无需覆盖内置读数。
您收到请求中的所有数据,并可以根据需要对其进行处理。

于 2012-09-05T10:09:09.390 回答