Как добавить окончание .html к URL-адресу ASP.NET MVC 5?

190
01 февраля 2018, 15:26

Нужно добавить окончание .html для URL-адресов в ASP.NET MVC 5. Чтобы было, например так:

http://example.com/category1/article1.html

Пытаюсь решить задачу так:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}.html",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );

Получаю ошибку 403.

Что я делаю не правильно?

Answer 1

Выяснилось, что я всё сделал правильно. Только не до конца.

После того, как задан маршрут с суффиксом .html, нужно соответствующим образом отредактировать web.config. Тогда всё заработает.

Ответ нашёл здесь. Хотя там рассматривается ASP.NET MVC 4, способ работает и для ASP.NET MVC 5.

<system.webServer>
    ...
    <handlers>
      <add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    ...
  </system.webServer>

Важное замечание

Помимо основного маршрута (с .html в конце) необходимо определить дополнительный с пустым шаблоном url, как это показано ниже.

routes.MapRoute(
   name: "Default",
   url: "",
   defaults: new { controller = "Home", action = "Index" });
 routes.MapRoute(
     name: "html",
     url: "{controller}/{action}.html",
     defaults: new { controller = "Home", action = "Index" });

Если этого не сделать, главная страница сайта будет не доступна по имени домена. Тогда вместо:

http://example.com/

придётся явно указывать соответствующие главной странице контроллер и действие

http://example.com/Home/Index.html

Либо делать редирект.

READ ALSO
Соединение 2х устройств в одной сети WiFi

Соединение 2х устройств в одной сети WiFi

Здравстуйте! Есть tcplistener на компьютере, и tcpclient на android смартфонеОба устройства подключены к 1 сети wifi (к компьютеру кабель от роутера, а телефон...

221
Сбрасывается счетчик в C# SignalR

Сбрасывается счетчик в C# SignalR

Добрый деньИли я где-то откровенно туплю или же и правда есть некая загвоздка

268
Как реализовать прием и передачу данных асинхронно WPF MVVM

Как реализовать прием и передачу данных асинхронно WPF MVVM

Добрый день, не могу разобраться с асинхронными методамиКак можно реализовать в приложение такую ситуацию

275
Нюансы работы с компонентом WindowsMediaPlayer

Нюансы работы с компонентом WindowsMediaPlayer

При работе с компонентом WindowsMedaiPlayer столкнулся со странной особенностью: мне нужно чтобы при одиночном клике по компоненту он разворачивался...

203