Поддержка обработки статических файлов в ASP.NET Core. Просмотр каталогов на сервере

По соображениям безопасности просмотр каталогов в ASP.NET Core отключен по умолчанию. Однако, если необходимо, то мы можем разрешить пользователя просматривать список каталогов и файлов на сервере.

Метод UseDirectoryBrowser

Метод UseDirectoryBrowser позволяет пользователям просматривать содержимое каталогов на сайте. Вернемся к приложению из прошлой статьи и включим поддержку просмотра каталогов. Напомню, что структура проекта была следующей:

Вызываем UseDirectoryBrowser:

public class Program
{
    public static void Main(string[] args)
    {
        
        var builder = WebApplication.CreateBuilder(new WebApplicationOptions() { WebRootPath = "html" });
        var app = builder.Build();

        app.UseDirectoryBrowser();

        var options = new DefaultFilesOptions();
        options.DefaultFileNames.Add("home.html");
        app.UseDefaultFiles(options); 
        app.UseStaticFiles();

        //включаем поддержку просмотра каталогов
        app.UseDirectoryBrowser();

        app.Run(async context => 
        {
            await context.Response.WriteAsync("Not Found");
        });

        app.Run();
    }
}

Теперь запустим приложение и посмотрим на результат:

Как можно видеть, в список файлов выведены и файл index.html из папки wwwroot и файл home.html из папки html, которую мы указали в настройках приложения для обработки статических файлов. Такое поведение приложения ASP.NET Core характерно, когда приложение запускается в режиме отладки из Visual Studio. Если запустить приложение без отладки, например, из проводника Windows, то в список попадут только файлы, находящиеся в папке, установленной в качестве корневой для статических файлов:

Настройка просмотра каталогов на сервере

Метод UseDirectoryBrowser имеет перегрузку, которая позволяет сопоставить определенный каталог в проекте определенным путем запроса. Например, создадим в папке wwwroot папку images и добавим туда какую-нибудь картинку:

Теперь разрешим пользователям просматривать содержимое этой папки, если задается путь /pics:

//включаем поддержку просмотра каталогов
 app.UseDirectoryBrowser(new DirectoryBrowserOptions()
 {
     FileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "wwwroot", "images")),
     RequestPath = "/pics"
 });

Теперь, если мы перейдем по URL http://localhost:[port]/pics/, то увидим содержимое папки images:

Метод UseFileServer

Еще один метод, который стоит упомянуть в части работы со статическими файлами в ASP.NET Core — это UseFileServer. Этот метод объединяется в себе вызов сразу трех методов — UseStaticFilesUseDefaultFiles и при необходимости UseDirectoryBrowser. По умолчанию просмотр каталогов отключен. Чтобы включить все опции, которые мы использовали выше, достаточно вызвать версию UseFileServer с настройками работы:

FileServerOptions serverOptions = new FileServerOptions()
{
    EnableDefaultFiles = true, //испольхуем файлы по умолчанию
    EnableDirectoryBrowsing = true,//разрешаем просмотр каталогов
};
//подключаем работу со статическими файлами
app.UseFileServer(serverOptions);

При необходимости, в настройках FileServerOptions можно настроить все те опции, которые мы настраивали выше, например, сопоставить путь в строке адреса браузера с физической папкой на диске и т.д, например,

FileServerOptions serverOptions = new FileServerOptions()
{
    EnableDefaultFiles = true, //испольхуем файлы по умолчанию
    EnableDirectoryBrowsing = true,//разрешаем просмотр каталогов
    FileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "wwwroot", "images")),
    RequestPath = "/pics"
};
//подключаем работу со статическими файлами
app.UseFileServer(serverOptions);

Итого

В этой части мы рассмотрели ещё один момент работы со статическими файлами в ASP.NET Core — просмотр каталогов на сервере. Научились сопоставлять путь в URL с физическими папками на диске для просмотра каталога. При этом, вызов метода UseFileServer позволяет настроить все опции работы со статическими файлами, рассмотренные в этой и предыдущей частях.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии