【问题标题】:Simplest standalone static file server for .NET Core适用于 .NET Core 的最简单的独立静态文件服务器
【发布时间】:2018-12-05 15:44:49
【问题描述】:

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

它被标记为与ASP.NET Core - serving static files 重复。所以我的问题是:

this answer 真的是最简单 .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();
        }
    }
}

【问题讨论】:

  • @vzwick 如果您阅读了这个问题,您提到的可能重复的问题是我在 this 问题中提到的已关闭问题。
  • 我知道。作为 35k 代表用户,您还应该知道做事的方法是编辑您的原始问题并请求重新打开,而不是创建另一个欺骗。
  • @vzwick Experience 告诉我它不会重新打开,我的问题仍未得到解答。确实我应该删除它,而不是创建重复项。
  • 一个相对成熟(可扩展/可插入)的网络服务器,大约 14 行重要的代码?真的没有比这更好的了。您总是可以编写一个 nuget 包,将其简化为带有一些参数的调用并发布它。然后你就可以以可重复的方式在大约 3 行中完成它。这一切都取决于你想在哪里画出抽象的界限。

标签: c# .net-core webserver


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这确实很简单。最后,我没有按照您的建议使用默认构建器,因为它还记录了我不想要的信息。我的“最终”示例最终是这样的:github.com/jirenius/csharp-res/blob/master/examples/HelloWorld/…
  • 为了让它工作,我必须添加一个using Microsoft.AspNetCore.Builder;
  • 如果您希望请求默认为例如。 index.html 如果没有指定文件,则在“UseStaticFiles”前面添加“UseDefaultFiles”。像这样:config.UseDefaultFiles().UseStaticFiles()
  • 我在一个空的控制台应用程序中使用了你的代码,在添加了以下 NuGet 包 Microsoft.AspNetCoreMicrosoft.AspNetCore.StaticFiles 后它工作了
【解决方案2】:

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

如果使用top-level statementsglobal using directivesminimal hosting model 更简单:

  1. 创建一个 ASP.NET Core 空项目

    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 更改为urlswebrootcommand line。例如:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多