Статические файлы

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 02.11.2019

Для определения пути хранения статических файлов в проекте используются два параметра ContentRoot и WebRoot. Статические файлы должны располагаться в каталоге ContentRoot/WebRoot. По умолчанию "ContentRoot" представляет каталог текущего проекта, а "WebRoot" по умолчанию представляет каталог wwwroot. То есть если использовать значения по умолчанию, то статические файлы следует располагать в папке "wwwroot", которая должна находиться в текущем проекте. Но естественно эти параметры можно переопределить.

В разных типах проектов ASP NET Core данная папка может уже быть по умолчанию в проекте, а может отсутствовать. Например, в проекте по типу Empty данная папка отсутствует, поэтому ее надо добавлять вручную.

Итак, возьмем проект по типу Empty и добавим в него новую папку wwwroot. Далее добавим в папку wwwroot новый файл index.html. Для его добавления нажмем на wwwroot правой кнопкой мыши и далее в контекстном меню выберем Add ->New Item. Затем в окне добавления нового элемента найдем шаблон для html-файлов:

Добавление html-файла в проект ASP.NET Core

Структура проекта после добавления папки и файла index.html:

Статические файлы в ASP.NET Core

Изменим код файла 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, то нам отобразится содержимое данной веб-страницы:

Обращение к статическим файлам в ASP.NET Core

По всем остальным запросам браузер выводил бы строку "Hello World".

Если бы index.html находился бы в какой-то вложенной папке, например, в wwwroot/html/, то для обращения мы можем использовать следующий запрос: http://localhost:58666/html/index.html

Изменение пути к статическим файлам

Что делать, если нас не устраивает стандартная папка wwwroot. И мы, к примеру, хотим, чтобы все статические файлы в проекте находились в папке static. Для этого добавим папку static в проект, и затем в ней определим какой-нибудь html-файл. Пусть он будет называться content.html:

Изменение пути к webroot в ASP.NET Core

Чтобы приложение восприняло эту папку, изменим код создания хоста в файле 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.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850