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

ANi*_*sus 0 c# webserver .net-core

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

它被标记为重复的ASP.NET Core - 服务静态文件。所以我的问题是:

这个答案真的简单的.NET核心静态文件的Web服务器可能吗?我是否理解正确(我试图将各种来源的信息拼凑在一起)?

启动文件

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"))
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

主文件

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

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

如果使用顶级语句全局 using 指令最小托管模型更简单:

  1. 创建 ASP.NET Core 空项目

    dotnet new web
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改(如果不存在则创建)Program.cs

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddDirectoryBrowser();
    var app = builder.Build();
    app.UseFileServer(enableDirectoryBrowsing: true);
    app.Run();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行。您可以使用命令行或类似方式更改主机配置值。例如:urlswebroot

    dotnet run -- webroot="C:/your-path/" urls="http://127.0.0.1:1234"
    
    Run Code Online (Sandbox Code Playgroud)

注意:要提供非标准内容类型,可能会返回 404。您需要通过以下方式添加额外的配置

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


Nev*_*ane 5

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

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

如果您想让事情保持轻松,则可以包括Microsoft.AspNetCore,Microsoft.AspNetCore.HostingMicrosoft.AspNetCore.StaticFiles。或者为了快速设置,您可以只安装一个包Microsoft.AspNetCore.All

  • 为了让它工作,我必须添加一个“using Microsoft.AspNetCore.Builder;” (3认同)
  • 如果您希望请求默认为例如。如果没有指定文件,则为index.html,然后在“UseStaticFiles”前面添加“UseDefaultFiles”。像这样:`config.UseDefaultFiles().UseStaticFiles()` (2认同)