Нужно добавить окончание .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.
Что я делаю не правильно?
Выяснилось, что я всё сделал правильно. Только не до конца.
После того, как задан маршрут с суффиксом .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
Либо делать редирект.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости