1

Пишу проект на ASP .NET MVC 4 В папке View\Home есть изображение bg.jpg но при попытке к нему обратиться http://localhost:14066/Home/bg.jpg происходит HTTP Error 404.0 - Not Found и естественно этот код не работает:

<style> .body { background-image: url("bg.jpg"); } </style>

И еще я пытаюсь подключить внешний css но он тоже не подключается хотя находится в одной папке с index. Как быть?

Vas Mil
  • 1,670
  • Статичные файлы лежат в static папке, переместите изображение и стили туда. – tcpack4 Oct 30 '17 at 08:07
  • Добавил в папку Home папку static, но ничего не изменилось, по прежнему при обращении http://localhost:14066/static/bg.jpg выдает 404 – Vas Mil Oct 30 '17 at 09:15
  • если не ошибаюсь должно быть localhost:14066/bg.jpg – tcpack4 Oct 30 '17 at 09:40
  • не работает, хотя bg.jpg уже везде – Vas Mil Oct 30 '17 at 09:52
  • возможности нет проверить и запустить проект. На работе и под убунтой :) почитайте тут https://stackoverflow.com/questions/17949460/how-do-you-request-static-html-files-under-the-views-folder-in-asp-net-mvc поищите StaticFileHandler в конфигах, если нет пропишите (примеры можно найти в гугле). – tcpack4 Oct 30 '17 at 09:58
  • создал папку content в проекте и файлы в этой папке доступны при обращении из браузера на прямую, но теперь не пойму как ссылаться из представления на эти файлы? Пробовал так: "content/bg.jpg" ничего не выходит... – Vas Mil Oct 30 '17 at 10:27
  • все ок решил,написал "content/bg.jpg" а надо "content/bg.jpg" Спасибо! – Vas Mil Oct 30 '17 at 10:34
  • оформите как ответ, может кому-то поможет. – tcpack4 Oct 30 '17 at 11:11

3 Answers3

2

Статичные файлы должны хранится в папке проекта в директории content

Есть еще большая статья на эту тему: https://docs.microsoft.com/ru-ru/aspnet/core/fundamentals/static-files

хотя вся суть в том что надо: 1) в методе BuildWebHost добавить .UseContentRoot(Directory.GetCurrentDirectory())

так в статье:

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

А так у меня:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .Build();

2) добавить в метод public void Configure(IApplicationBuilder app, IHostingEnvironment env) :

app.UseStaticFiles();

После чего все что вы положите в папку wwwroot у вас будет доступно

Vas Mil
  • 1,670
  • И подключать их лучше через @Url.Content("~/content/bg.jpg"), иначе не будет работать на всех страницах, кроме / (или как ~/content/bg.jpg, но работает не везде). –  Oct 30 '17 at 18:26
0
<style> .body { background-image: url("@Url.Content("~/Views/Home/bg.jpg")"); } </style>
  • вот именно для того, чтобы так не делали, в Views/web.config вписан <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> –  Oct 30 '17 at 18:21
0

все дело в обработке маршрутов, когда вы добавляете файл в Home, дефолтный обработчик маршрутов пытается сопоставить запрос с маршрутом, и ничего не находит

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

Допустим, вы добавили папку Public с необходимым контентом, чтобы обработчик игнорил все папки и файлы внутри него, нужно что-то вроде

routes.IgnoreRoute("Public/{all}");
Buka
  • 180