.NET Core 最简单的独立静态文件服务器

Simplest standalone static file server for .NET Core

我写了关于如何使用尽可能少的行和文件为 .NET Core 编写一个简单的静态文件服务器的问题。

它被标记为 的副本。所以我的问题是:

真的是最简单的 .NET Core 静态文件网络服务器吗?我是否理解正确(我正在尝试从各种来源拼凑信息)?

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

namespace StaticFileServer {
    public class Startup{

        public void Configure(IApplicationBuilder app){
            app.UseDefaultFiles();
            app.UseStaticFiles(new StaticFileOptions() 
            {
                FileProvider = new PhysicalFileProvider(
                    Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\dist"))
            });
        }
    }
}

Main.cs

using System;
using Microsoft.AspNetCore.Hosting;

namespace StaticFileServer
{
    class Program
    {
        static void Main(string[] args)
        {    
            var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();

            host.Run();
        }
    }
}

将代码放在一起,我找到的用于从该位置提供静态文件的最简单的完整应用程序如下:

class Program
{
    static void Main(string[] args)
    {
        WebHost.CreateDefaultBuilder(args)
            .Configure(config => config.UseStaticFiles())
            .UseWebRoot("wwwroot/dist").Build().Run();
    }
}

如果您想让事情变得简单,您可以包括 Microsoft.AspNetCoreMicrosoft.AspNetCore.HostingMicrosoft.AspNetCore.StaticFiles。或者为了快速设置,您可以只安装一个包 Microsoft.AspNetCore.All

对于 .NET 6 / C# 10 或更高版本

如果top-level statements, global using directives and minimal hosting model更简单:

  1. 创建一个ASP.NET核心空项目

    dotnet new web
    
  2. 更改(如果不存在则创建)Program.cs

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddDirectoryBrowser();
    var app = builder.Build();
    app.UseFileServer(enableDirectoryBrowsing: true);
    app.Run();
    
  3. 运行吧。您可以更改 host configuration values like urls or webroot with command line。例如:

    dotnet run -- webroot="C:/your-path/" urls="http://127.0.0.1:1234"
    

注意:要提供非标准内容类型,可能会返回 404。您需要 add extra configuration 通过:

app.UseFileServer(new FileServerOptions()
{
    EnableDirectoryBrowsing = true,
    StaticFileOptions =
    {
        ServeUnknownFileTypes = true,
        DefaultContentType = "application/octet-stream"
    }
});