UrlRewriting. Сетевой Модуль + IIS7 Равняется Странице. Пользователь == пустой указатель?

Я использовал UrlRewriting. Сетевой модуль в течение пары лет теперь без любых проблем в Windows XP и Windows 2003. Я просто недавно обновил свой домашний ПК до Windows 7 и начал разрабатывать новый веб-сайт.

План состоял в том, чтобы использовать .html расширения и переписать их к их .aspx дубликатам с помощью UrlRewriting. Сетевой модуль. Все работает безупречно в 2008 VWD, но когда я пытаюсь выполнить его через IIS7, это - другая история.

Когда я пытаюсь получить доступ к странице через .html, переписывают, я больше не могу получать доступ к Page. Пользователь; это продолжает возвращать пустой указатель. Если я поразил использование страницы, это - .aspx расширение, Page. Пользователь правильно заполняется. Я должен также упомянуть, что у меня есть контроллер LoginView в моем Ведущем устройстве Page, и он страдает от тех же признаков: При доступе через .html расширение это показывает AnonyousTemplate; При использовании .aspx расширения это правильно показывает LoggedInTemplate. Я предполагаю, что эти два связаны.

[Примечание: я также попробовал URL без расширения, и они показывают ту же проблему]

Единственным путем я добрался, это для работы должно переключить пул приложений на Классика, который затем требует, чтобы я добавил ASP.NET ddl обработчик для .html расширения [иначе, это обрабатывается StaticFileHandler и подходит как 404 ошибки]. Однако я хотел бы, чтобы мое веб-приложение работало правильно за людьми, не имея необходимость возиться с IIS.

Таким образом, меня оставляют с несколькими вопросами:

  • Делает у любого есть идеи относительно почему Page. Пользователь всегда равняется пустому указателю для .html => .aspx переписанные страницы?
  • Почему это работает в 2008 VWD, но не IIS7?
  • Что изменилось от IIS6 => IIS7, который, возможно, вызвал это?
  • Какие-либо другие мысли об обходных решениях?

[Примечание: Я просто попробовал .aspx => .aspx, переписывают, и он не показал проблему. Едва ли, что я хочу, но думал, что должен упомянуть это.]

5
задан Sam 8 January 2010 в 03:56
поделиться

2 ответа

Только что произошел прорыв с модулем UrlRewriting.Net. Это заставило его работать в Integrated Mode в IIS7:

<модули runAllManagedModulesForAllRequests="true">

После выяснения этого я провел поиск по "runAllManagedModulesForAllRequests" и первым, что всплыло, был блог Скотта Гатри (Scott Guthrie), в котором на самом деле говорится об использовании его для этой цели.

11
ответ дан 18 December 2019 в 14:46
поделиться

Другой подход, который, кажется, работает, заключается в удалении модуля Session и его замене, оставив флажок "Invoke only for requests to ASP.NET applications or managed handlers" снятым. В файле web.config это выглядит так:


<system.webServer>
  <modules>
    <remove name="Session" />
    <add name="SessionManualAdd" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </modules>
</system.webServer>

Похоже, проблема в том, что модуль Session не выполняется для, скажем, '*.htm' файлов, когда используется HttpContext.RewritePath, но удаление и считывание модуля таким образом приводит к тому, что обработчик Session выполняется для запроса.

Это решение было предложено в приведенной ниже ветке. К сожалению, Microsoft предпочла не полностью объяснить причины такого поведения:

http://connect.microsoft.com/VisualStudio/feedback/details/357248/context-rewritepath-disables-session-module-in-iis7

2
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: