Не подключаются стили и скрипты на страницах, кроме Index в ASP.NET Core. Ошибка 404
Всем привет. Столкнулся с такой проблемой, в проекте ASP.Net Core MVC к вьюшке Login не подключаются ни стили, ни шрифты, ни js файлы, ни картинки. Выбрасывает вот такую ошибку:
Статические файлы в program.cs я подключил, в _Layout.cshtml линки на скрипты и стили правильные. Самое интересное, что стили работают на главной странице, там все хорошо, но если перейти на другую вьюшку, которая названа не Index, то стили пропадают. То есть, стили работают только на вьюшках, которые названы Index.
Я создал также вьюшку Index в том же контроллере, где и вьюшка Login, с таким же html кодом, и все прекрасно работает, стили, скрипты применились и шаблон корректно отображается, но если в если поменять путь в asp-action обратно на Login, но стили опять не работают, выдавая такую же ошибку.
В процессе поиска ответа, я тестил все на других проектах. В только что созданных шаблоном MVC приложения все нормально работает при переходе на другие страницы, но как только я из этого проекта сделал копию своего старого, то опять та же проблема. Пробовал и на проектах asp.net core 6 и asp.net core 5, разницы нет. Изменял маршрут, но не из-за него, потому что у меня стоял стандартный.
В итоге пришел к выводу, что виноват мой шаблон бутстрапа, потому что, как только на чистый проект в папку wwwroot я закинул свои стили и срипты, а потом и html код в _Layout, возникает такая проблема, а когда откатываю все обратно проблема исчезает.
Ответа в интернете я не нашел :( Может кто-то сталкивался с таким и может помочь. Прикрепляю гитхаб репозиторий: тык
Ответы (1 шт):
Скачал ваш репозиторий, открыл в Visual Studio 2022. Все запустилось и действительно проблемы с отображением страниц из Account.
Контроллер Home является контроллером по умолчанию и к нему не нужно указывать путь (при этом его вьюха отображается без артефактов). Но если вы добавите в путь /Home/Index, то таже самая страница уже отобразится криво.
Все дело в том, что пути в ASP.NET приложении надо указывать абсолютные, т.к. у вас используются Shared страницы и вы не знаете, по какому пути они будут подключаться.
Давайте для примера заменим какой-нибудь ваш относительный путь на абсолютный:
ваш относительный (как в репозитории):
<link rel="stylesheet" href="css/nivo-slider.css" type="text/css" asp-append-version="true"/>
правильный абсолютный (учитывает, что приложение может быть развернуто не в корне):
<link rel="stylesheet" href="~/css/nivo-slider.css" type="text/css" asp-append-version="true"/>
Также обращаю внимание, что wwwroot не надо указывать, т.к. все файлы внутри wwwroot уже находятся как бы в корне (в Program.cs настраивается доступ к статическим файлам из wwwroot).
Аналогичную замену надо сделать во всех местах вьюх, где есть ссылки на статические ресурсы.




