ASP.NET MVC Routing - добавить расширение .html к маршрутам - PullRequest
16 голосов
/ 17 февраля 2012

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

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

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-страницы (без ответа, без дублирования)

Ответы [ 4 ]

9 голосов
/ 17 февраля 2012

Вы предполагаете, что обработчик 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.

8 голосов
/ 27 февраля 2014

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

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
3 голосов
/ 17 мая 2013

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

  <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>
3 голосов
/ 17 февраля 2012

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

...