如何在ASP.NET Core中配置一个替代文件夹到wwwroot?

13

在ASP.NET Core中,是否可以配置一个不同的文件夹替换wwwroot?如果可以,怎么做?这种改变是否会有任何副作用?

目前整个项目中唯一包含wwwroot的配置只能在project.json中找到,就像下面的代码一样;但是仅仅替换值为新文件夹的名称并不足以让静态文件(例如:index.html)得到读取。

"publishOptions": {
    "include": [
        "wwwroot",
        "web.config"
    ]
},
3个回答

17

在ASP.NET Core中,是否可以配置一个不同的文件夹来替换wwwroot文件夹?

是的。在您的Program类中添加一个UseWebRoot调用:


public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseWebRoot("myroot") // name it whatever you want
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

这个更改会有什么副作用吗?

以下是我能想到的三个副作用:

  1. Bower 包管理器将无法正常工作,因为它在 wwwroot 中查找 lib 文件夹。我不确定是否可以配置此项。
  2. 您需要修复 bundleconfig.json,以便它可以查看新目录。
  3. 您需要更新 project.json 中的 include 部分,将您的新目录包含在发布输出中。

1
关于#1,Bower的路径可以在.bowerrc文件中进行配置,该文件应位于项目的根文件夹中。以下是默认值: { "directory": "wwwroot/lib" } - Jason

12

使用 ASP.NET Core 2.2,在您的StartupConfigure()方法中,您可以更改以下内容:

app.UseStaticFiles();

app.UseStaticFiles(new StaticFileOptions
{
  FileProvider = new PhysicalFileProvider(Path.Combine(
    AppDomain.CurrentDomain.BaseDirectory,
    "myStaticFolder")),
});

参考 / 来源 (德文版)


3
使用 ASP.NET Core 6 的新功能,如果你正在使用新的最小主机模型WebApplication,那么最简单的方法是通过WebApplicationOptionsWebRootPath属性进行配置:
var builder = WebApplication.CreateBuilder(
    new WebApplicationOptions() 
    {
        WebRootPath = "mywebroot"
    }
);

默认情况下,使用Visual Studio 2022+或.NET 6 SDK模板生成的Web应用程序将配置为最小主机模型,因此这可能是新ASP.NET Core 6应用程序最熟悉的方法。
虽然入口点已经改变了,使用WebApplication,但是通过最小主机模型仍然可以在被接受的答案中推荐的方式到达UseWebRoot()。但调用它会产生警告,建议改用WebApplicationOptions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接