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

Установка каталога статических файлов. UseStaticFiles

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

Для отправки файлов в ASP.NET Core в компонентах middleware можно использовать метод SendFileAsync() объекта HttpResponse, например:

Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

Module Program
    Sub Main(args As String())

        Dim builder = WebApplication.CreateBuilder(args)
        Dim app = builder.Build()

        app.Run(Async Function(context As HttpContext) As Task
                    Await context.Response.SendFileAsync("index.html")
                End Function)

        app.Run()
    End Sub
End Module

Однако для упрошения работы со статическими файлами ASP.NET Core также предоставляет специальный встроенный middleware, который подключается с помощью метода UseStaticFiles().

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

Итак, добавим в проект новую папку wwwroot. Далее добавим в папку wwwroot новый файл index.html. То есть у нас получится следующий проект:

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

Изменим код файла index.html, например, следующим образом:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>METANIT.COM</title>
</head>
<body>
    <h1>Index Page</h1>
</body>
</html>

Для того, чтобы клиенты могли обращаться к этому файлу, подключим соответствующий компонент middleware с помощью метода UseStaticFiles():

Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

Module Program
    Sub Main(args As String())

        Dim builder = WebApplication.CreateBuilder(args)
        Dim app = builder.Build()

        app.UseStaticFiles()   ' добавляем поддержку статических файлов

        app.Run(Async Function(context As HttpContext) As Task
                    Await context.Response.WriteAsync("Hello World")
                End Function)

        app.Run()
    End Sub
End Module

Для подключения функциональности работы со статическими файлами применяется метод UseStaticFiles(), который реализован как метод расширения для типа IApplicationBuilder.

Теперь, если мы обратимся к добавленному файлу, например, по пути /index.html, то нам отобразится содержимое данной веб-страницы:

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

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

Если бы index.html находился бы в какой-то вложенной папке, например, в wwwroot/html/, то для обращения к нему мы могли бы использовать путь /html/index.html. То есть middleware для работы со статическими сайтами автоматически сопоставляет запросы с путями к статическим файлам в рамках папки wwwroot.

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

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

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

Допустим, в этом файле будет какое-нибудь простейшее содержимое:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>METANIT.COM</title>
</head>
<body>
    <h1>Content from Static folder</h1>
</body>
</html>

Чтобы приложение восприняло эту папку, изменим код создания хоста в файле Program.vb:

Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

Module Program
    Sub Main()
        Dim builder = WebApplication.CreateBuilder(
                New WebApplicationOptions With {.WebRootPath = "static"}) 'изменяем папку для хранения статики
        Dim app = builder.Build()

        app.UseStaticFiles()   ' добавляем поддержку статических файлов

        app.Run(Async Function(context As HttpContext) As Task
                    Await context.Response.WriteAsync("Hello World")
                End Function)

        app.Run()
    End Sub
End Module

Для добавления пути к файлам используется перегруженная версия метода CreateBuilder(), которая в качестве параметра принимает объект WebApplicationOptions. Его свойство WebRootPath позволяет установить папку для статических файлов.

И после этого мы также сможем обращаться к статическим файлам из папки static:

UseStaticFiles и WebRootPath в ASP.NET Core и Visual Basic .NET
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850