Как я могу изменить поток запроса ввода - PullRequest
1 голос
/ 04 ноября 2011

Я хочу изменить поток входных запросов.

Деталь:

Я хочу заменить «Текст 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. Я Google, и в результате я должен написать собственный HttpModule с событием CHttpModule :: OnReadEntity. Это правильно?

Буду очень признателен, если вы подскажете, как я могу изменить поток входных запросов.

Большое спасибо.

Юи

1 Ответ

0 голосов
/ 07 ноября 2011

Я отладил и вижу, что мы будем ловить два раза за один запрос.

если я только читаю тело сущности, затем вставляю снова, не внося никаких изменений, второй запрос будет иметь ровно содержимое и запрос будет выполняться нормально. Исходный код выглядит следующим образом:

// Получить тело запроса.
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 найдено (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"); < br /> }

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

Вы можете скачать мое простое решение по адресу: http://www.4shared.com/file/OJr8GFJQ/HelloWorld_2.html

...