Для отправки файлов в 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. То есть у нас получится следующий проект:
Изменим код файла 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
,
то нам отобразится содержимое данной веб-страницы:
По всем остальным запросам браузер выводил бы строку "Hello World".
Если бы index.html находился бы в какой-то вложенной папке, например, в wwwroot/html/, то для обращения к нему мы могли бы использовать путь /html/index.html. То есть middleware для работы со статическими сайтами автоматически сопоставляет запросы с путями к статическим файлам в рамках папки wwwroot.
Что делать, если нас не устраивает стандартная папка wwwroot. И мы, к примеру, хотим, чтобы все статические файлы в проекте находились в папке static. Для этого добавим в проект папку static в проект и определим в ней какой-нибудь html-файл. Пусть он будет называться content.html:
Допустим, в этом файле будет какое-нибудь простейшее содержимое:
<!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: