2

У меня есть большой корпус. веб-сайт со смешанным классическим asp и asp.net, который в настоящее время размещен на сервере Win 2003, IIS 6.Классический ASP Request.Form не работает при использовании интегрированного конвейера

Мне нужно изменить все выходные данные с некоторыми модификациями html, независимо от того, из какого мира они происходят. Часть asp действительно старая и плохо структурированная, поэтому я не могу действовать ни на один из «общих включений», чтобы применить все необходимые изменения. Наконец, некоторые страницы asp выводят код из нескольких объектов OCX/COM ... Мы уже планируем переписать/перенести на .net, но, к сожалению, это долгосрочный проект, и я не могу идти быстро.

Так что я думал (и тестировал), чтобы перенести его на Win 2008 R2, IIS 7.5 и воспользоваться встроенным режимом конвейера, где я могу модифицировать все выходные данные с помощью .net httpmodule. Все работает нормально: я могу правильно «ввести» html-код на страницы, созданные через asp и asp.net, но у меня возникают проблемы, когда классические страницы asp будут обрабатывать данные формы, отправленные через почту (x-www-form- urlencoded).

Похоже, что классический asp не хватает объекта Request.Form вообще при использовании встроенного режима конвейера, выбрасывая ошибку «80004005» при каждом использовании; Request.QueryString вместо этого работает правильно.

Я бы не переключился на режим классического трубопровода, так как я потеряю преимущества изменения страниц, созданных классическим ASP. Использование фильтра Исапи здесь - это кошмар, и я не пойду в этом направлении.

ли кто-нибудь знает какой-либо обходной путь, чтобы получить Request.Form работает классические осины, когда режим Integrated Pipeline активен -или- какие-либо образом изменить конечную воспроизведенную выходную страницу приходя от классических осин при использовании классического трубопровода, так что я могу изменить его с кодом .net перед отправкой в ​​браузер?

Спасибо за любую помощь, слегка подвыпивший

EDIT: К сожалению, мы не нашли решение этой проблемы. В то же время мы полностью перестроили сайт с нуля, используя много современного решения (yay!). Спасибо всем за вашу помощь!

+0

Используется ли только 'Request (" formElement ")' работает? –

+0

Кроме того, можете ли вы разместить URL-адрес (или, по крайней мере, имя хоста)? И - происходит ли это с любым браузером? –

+0

Привет, Request («formElement») также терпит неудачу, и, честно говоря, весь код написан таким образом. – Squiffy

ответ

1

Я думаю, это потому, что вы используете Request.Form в http-модуле. Согласно моим экспериментам, Request.Form работает в asp в интегрированном режиме, если вы не получите доступ к нему из модуля до того, как будет обработан код asp. В этом случае предлагается использовать HttpServerUtility.TransferRequest на IIS forums. Вы можете использовать

const string dontTransferKey = "DONT_TRANSFER_MODULE"; 
    if (HttpContext.Current.Request.Headers[dontTransferKey] != null) 
     return; 

    ...............all your http module logic. use Request.Form................... 

    HttpContext.Current.Request.Headers.Add(dontTransferKey, "true"); 
    HttpContext.Current.Server.TransferRequest(HttpContext.Current.Request.Url.AbsolutePath, true); 

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

0

Не уверен, что вы используете Glimpse, но если да, я просто потратил целый день, пытаясь понять, почему внезапно мои классические ASP Request.Forms терпят неудачу. Короче говоря: я закомментировать следующую строку в конфигурации проблеска в:

<add type="Glimpse.Core.Policy.AjaxPolicy, Glimpse.Core" /> 

Добавив, что в к игнорируемым типам решить мою проблему. Теперь я могу получить доступ к Request.Form/Request («поле») в классическом ASP. Между прочим, я использую встроенный режим.

Надеюсь, это сэкономит время, которое я провел сегодня ...

0

Просто потушите его, попробовали ли вы «Request.Item()»?