ASP.NET MVC Routing - добавление расширения .html к маршрутам

Я новичок в MVC и Routing, и мне было предложено изменить приложение, чтобы использовать разные URL-адреса. задача, которая немного над мной, так как у меня нет опыта.

ok, давайте поговорим о некотором коде:

routes.MapRoute(
"CategoryBySeName", // Route name
"products/{SeName}", // URL with parameters
new { controller = "Catalog", action = "CategoryBySeName" }
);

это работает так, как ожидалось, но тогда клиент хотел ".html" в конце путей, поэтому я изменил:

"products/{SeName}", // URL with parameters

в

"products/{SeName}.html", // URL with parameters

который не работает (страница IIS 404 - MapRequestHandler) похоже, что iis пытается загрузить физический файл с этим именем, а не передавать его в приложение.

Аналогично: ASP.NET MVC Маршрутизация для начала на странице html (не ответил, не дублируется)

Ответ 1

Изменение пула приложений с Classic на Integrated устранило проблему. спасибо вам за помощь.

Ответ 2

Вы предполагаете, что обработчик IIS, вероятно, захватывает запрос до MVC, вероятно, правильный.

Предполагая, что IIS 7: http://technet.microsoft.com/en-us/library/cc770990(v=ws.10).aspx

Вам нужно отредактировать обработчик .html в IIS для использования ASP.NET.

Вы можете найти его в свойствах веб-сайта на вкладке домашнего каталога в конфигурации приложения в разделе сопоставлений в разделе II6.

Что-то в строках (версия может быть разной): C:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll - это то, что вам нужно для обработки файлов .html.

Ответ 3

Вам нужно принудительно выполнить весь запрос через конвейер ASP.NET, и вы можете сделать это, добавив только эту единственную строку в web.config вашего приложения:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

Ответ 4

Просто добавьте этот раздел в Web.config, и все запросы к маршруту /{* pathInfo} будут обрабатываться указанным обработчиком, даже если в pathInfo есть точки. (взято из примера ServiceStack MVC Host Web.config и этого ответа fooobar.com/info/26862/...)

  <location path="route">
    <system.web>
      <httpHandlers>
        <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
  </location>