如何更改输入请求流

时间:2011-11-04 05:12:01

标签: input stream request

我想更改输入请求流。

详情是:

我想将输入流中的“文本1”替换为“文本2”

第一个:我使用Request.Filter作为http://msdn.microsoft.com/en-us/library/system.web.httprequest.filter.aspx但是这样我只能用另一个字节替换字节数据,我不能用字符串替换字符串而且我也不能改变缓冲区大小。我需要通过其他字节数组(content和buffer.length)访问和替换旧缓冲区

第二种:我尝试使用ISAPI过滤器,但似乎IIS 7及更高版本不再支持SF_NOTIFY_READ_RAW_DATA。我谷歌和结果是我应该用CHttpModule :: OnReadEntity事件编写一个原生的HttpModule。是不是?

如果您能告诉我如何更改输入请求流,我将非常感激。

非常感谢。

于伊

1 个答案:

答案 0 :(得分:0)

我进行了调试,发现我们每次请求会抓两次。

如果我只读取实体主体,然后再次插入,不做任何更改,第二个请求将具有完全内容并且请求运行良好。源代码如下:

//检索请求正文             hr = pHttpRequest-> ReadEntityBody(
                pvRequestBody,byteCount,false,& byteCount,NULL);
    pHttpRequest-> InsertEntityBody(pvRequestBody,byteCount);

如果我读取实体主体,则将'ngo + duc + huy'替换为'ngy + van + qua'(这是成功的),第二个请求将有错误的内容。此请求有一些奇怪的内容:'ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ'

所以,请求没有运行属性。源代码如下:

//检索请求正文             hr = pHttpRequest-> ReadEntityBody(
                pvRequestBody,byteCount,false,& byteCount,NULL);
size_t found(0);
            string requestContent = static_cast(pvRequestBody);

            found = requestContent.find(“ngo + duc + huy”);
            if(找到!= string :: npos)
            {
                requestContent =
requestContent.replace(requestContent.find(“ngo + duc + huy”),sizeof(“ngo + duc + huy”) - 1,
“ngu + van + qua”); <登记/>             }

        pvRequestBody = (void*)requestContent.c_str();<br />
pHttpRequest->InsertEntityBody(pvRequestBody, byteCount);<br />

您可以在http://www.4shared.com/file/OJr8GFJQ/HelloWorld_2.html

下载我的简单解决方案