Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Для определения пути хранения статических файлов в проекте используются два параметра ContentRoot и WebRoot. Статические файлы должны располагаться в каталоге ContentRoot/WebRoot. По умолчанию "ContentRoot" представляет каталог текущего проекта, а "WebRoot" по умолчанию представляет каталог wwwroot. То есть если использовать значения по умолчанию, то статические файлы следует располагать в папке "wwwroot", которая должна находиться в текущем проекте. Но естественно эти параметры можно переопределить.
В разных типах проектов ASP NET Core данная папка может уже быть по умолчанию в проекте, а может отсутствовать. Например, в проекте по типу Empty данная папка отсутствует, поэтому ее надо добавлять вручную.
Итак, возьмем проект по типу Empty и добавим в него новую папку wwwroot. Далее добавим в папку wwwroot новый файл index.html. Для его добавления нажмем на wwwroot правой кнопкой мыши и далее в контекстном меню выберем Add ->New Item. Затем в окне добавления нового элемента найдем шаблон для html-файлов:
Структура проекта после добавления папки и файла index.html:
Изменим код файла index.html, например, следующим образом:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>ASP.NET Core</title> </head> <body> <h2>Статические файлы в ASP.NET Core</h2> </body> </html>
Но чтобы приложение могло бы отдавать статические файлы клиенту, нам надо добавить в конвейер обработки запроса в методе Configure()
класса Startup
компонент middleware в виде метода расширения UseStaticFiles():
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; namespace HelloApp { public class Startup { public void Configure(IApplicationBuilder app) { app.UseStaticFiles(); // добавляем поддержку статических файлов app.Run(async (context) => { await context.Response.WriteAsync("Hello World"); }); } } }
Теперь, если мы обратимся к добавленному файлу, например, по пути http://localhost:58666/index.html, то нам отобразится содержимое данной веб-страницы:
По всем остальным запросам браузер выводил бы строку "Hello World".
Если бы index.html находился бы в какой-то вложенной папке, например, в wwwroot/html/, то для обращения мы можем использовать следующий запрос: http://localhost:58666/html/index.html
Что делать, если нас не устраивает стандартная папка wwwroot. И мы, к примеру, хотим, чтобы все статические файлы в проекте находились в папке static. Для этого добавим папку static в проект, и затем в ней определим какой-нибудь html-файл. Пусть он будет называться content.html:
Чтобы приложение восприняло эту папку, изменим код создания хоста в файле Program.cs:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace HelloApp { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseWebRoot("static"); }); } }
Для объекта IWebHostBuilder определен метод UseWebRoot(), который позволяет переопределить папку.
И после этого мы также сможем обращаться к статическим файлам, только теперь они будут браться из папки static, а не из wwwroot.