我想更改输入请求流。
详情是:
我想将输入流中的“文本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。是不是?
如果您能告诉我如何更改输入请求流,我将非常感激。
非常感谢。
于伊
答案 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 />
下载我的简单解决方案