Почему данные POST теряются при отправке со страницы Custom 404 в IIS 6.0? - PullRequest
1 голос
/ 05 мая 2009

Я создал систему Custom 404 CMS в .NET 3.5, и, хотя публикация данных работает локально в IIS 5.1 и 6.0, она не работает на рабочем сервере IIS 6.0. Я сравнивал настройки сайта IIS 6.0 по пунктам, и они почти идентичны, единственные различия не имеют значения.

Я подтвердил, что в каждом случае форма отправляется в "http://domain/folder/folder/page.resource" (код в SVN) и что при отправке не происходит переадресация (я выбрасывал исключения, чтобы убедиться). сервер:

IIS 5.1 (my computer, works):
ServerVariables["REQUEST_METHOD"]="POST"
Request.TotalBytes = 1600
Request.QueryString.Count = 1 (NOTE: contains "404;http://domain:80/folder/folder/page.resource" in each case)
Request.Form.Count = 109

IIS 6.0 (test server, works):
ServerVariables["REQUEST_METHOD"]="GET" (NOTE: IIS 6.0 reads this as "GET" instead of "POST")
Request.TotalBytes = 1600
Request.QueryString.Count = 1
Request.Form.Count = 109

IIS 6.0 (production server, does not work):
ServerVariables["REQUEST_METHOD"]="GET"
Request.TotalBytes = 0 (NOTE: should be ~1600)
Request.QueryString.Count = 1
Request.Form.Count = 0 (NOTE: should be 109)

У кого-нибудь есть идеи? Я читал о данных POST, не представленных в IIS 7.0 для 404 страниц, но не в 6.0. Моя форма в этом формате:

<form id="GolfRegistration" name="GolfRegistration" method="POST" action="/folder/folder/page.resource" onSubmit="return CalculateAmount();">
<input type="button" value="Submit" onClick="if(ValidateInput()){submit(GolfRegistration);}">
</form>

Только для IIS 5.1. Я устанавливаю расширение .resource в «IIS> Веб-сайт> Свойства> вкладка« Домашний каталог »> Кнопка конфигурации> Добавить» для работы с GET, HEAD и POST. Это не позволяет мне получить 405 ошибок при отправке.

Редактировать: я изменил POST на GET, и во всех 3 случаях он отправил данные правильно, поэтому это не проблема формы. К сожалению, я не могу передать переменные (их 109) в строку запроса.

Ответы [ 2 ]

2 голосов
/ 22 мая 2009

У меня была такая же проблема, и, к сожалению, похоже, что ответ "это особенность".

Подробнее здесь: Хорошо, я попытался опубликовать ссылку на описание проблемы, но там говорится, что «новые пользователи не могут размещать ссылки». Поэтому лучше всего я могу сделать следующее: выполнить поиск в Google по запросу «IIS 6: данные публикации формы отсутствуют в пользовательском обработчике ошибок 404/405» (убедитесь, что он указан в кавычках) и, по крайней мере, на момент написания этой статьи. , лучшим результатом должна быть страница, на которую я ссылался.

Итак, что происходит:

1) Ваш несуществующий URL-адрес POST'd (например, mydomain.com/somepage) 2) IIS получает запрос, отмечает, что некоторая страница не существует, и затем запускает второй запрос к вашему обработчику ошибок, и метод для этого запроса, внутренне, GET. И ни одна из ваших данных POST не передается.

Это оставляет вопрос о том, почему вы каждый добиваетесь успеха в IIS 6 - это меня расстроило.

В любом случае, прочитайте ссылку выше для получения дополнительной информации.

Кстати, я использую PHP на IIS 6 / Windows2003 и обнаружил интересный обходной путь. Хотя PHP не получает переменные POST от IIS (как и следовало ожидать), PHP по-прежнему имеет доступ к необработанному входному потоку, идентифицированному как «php: // input», который может читать запрос original тело от. Он будет содержать переменные POST в необработанном формате - я смог использовать PHP-функцию parse_str (), чтобы получить переменные POST из этой необработанной строки.

Итак, может сделать что-то подобное в ASP.NET. Вы пытались проверить Request.InputStream? Если память мне не изменяет, это даст вам поток, с которого вы сможете читать. Может быть, он будет иметь необработанные данные POST?

-Josh

1 голос
/ 05 мая 2009

Попробуйте временно изменить метод формы на GET . Это должно сказать вам, отправляются ли какие-либо данные и какие данные отправляются.

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

...