【问题标题】:ASP.NET Core - Cannot serve static files - only defaultASP.NET Core - 无法提供静态文件 - 仅默认
【发布时间】:2019-04-01 12:41:02
【问题描述】:

基本的 ASP.NET Core 2.1 Web 应用程序。

Startup.cs 包含以下内容:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseMvc();
}

在这种情况下,当我尝试浏览到 webroot 目录(即 project-dir / wwwroot)中的任何 HTML 文件时,它不会得到服务。 webroot 目录包含一个index.html 文件和一个第二个HTML 文件。无法通过键入 URL 来提供任何服务。

如果我更改 Startup.cs 以包含默认文件,如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseMvc();
}

然后index.html 文件得到服务。即使我输入另一个 HTML 文件的名称,我也会得到 index.html 文件(根据文档)。显然,UseDefaultFiles() 调用的 URL 编写器设法正确处理了这个问题,但为什么它不能通过直接 URL 工作?

编辑 我在上面说过“当我尝试浏览到 webroot 中的任何 HTML 文件时”,但实际上我没有尝试“任何”文件,而是我正在处理的文件名称为 export.html、index.html 或文件一个名为“核心”的子文件夹。请参阅下面的答案了解我的发现。

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    UseStaticFiles(),专门为wwwroot 项目目录单独服务。如果您愿意,您可以自定义提供哪些目录。

    当您说“webroot”时,我只能推测您是在谈论项目根目录,默认情况下不会提供服务。调用 UseDefaultFiles() 会稍微改变这种行为,以允许自动提供诸如 index.html 等内容,但通常不包括静态文件。

    您能做的最好的事情就是将所有内容都放入wwwroot。使用静态文件中间件时,其中的所有内容都会自动映射到文档根目录,因此wwwroot/index.html 将在https://example.com/index.html 可用,同样,任何静态资源(如 JS 或 CSS)也将可用。

    【讨论】:

      【解决方案2】:

      也许 IIS 服务器不提供 JS、CSS 和图像文件(静态文件)。在某些部署中发生在我身上 试试这个

      Windows 7

      1. 点击开始,进入控制面板并选择程序。
      2. 在程序和功能下,选择打开或关闭 Windows 功能。将出现 Windows 功能对话框。
      3. 展开根级项目 Internet 信息服务,展开万维网服务,然后展开通用 HTTP 功能。 选择静态内容。

      Windows Server 2008

      1. 点击开始,选择所有程序
      2. 选择管理工具,然后选择服务器管理器。
      3. 在导航窗格中,选择角色,然后选择添加角色。
      4. 在“开始之前”窗口中,单击“下一步”。
      5. 转到选择服务器角色窗口 > Web 服务器 (IIS) > 下一步 > 下一步。
      6. 在 Select Role Service 窗口中,展开 Common HTTP Features 然后添加静态内容

      【讨论】:

      • 谢谢,但是 IIS 可以提供静态文件。奇怪的是,我可以在同一目录中提供 JS 文件
      【解决方案3】:

      答案既简单又令人惊讶:

      显然,ASPNetCore 不接受某些字符串作为文件夹和文件名。

      禁止的值是:

          exports
          core
      

      这意味着文件夹名和文件名(即exports.html 不起作用,子文件夹'exports' 也很麻烦。)

      这是我找到的两个,因为这些名称出现在我的目录中。可能还有其他名称。我在任何地方都找不到这方面的文档

      但奇怪的是,“index.html”也不起作用。仅当我使用 app.UseDefaultFiles() 提供该文件时才有效。

      (请注意澄清 - 当我在原始帖子中说“没有提供任何服务”时,实际上没有提供的是名为“exports.html”的文件,以及“核心”子文件夹中的任何文件。我没有测试任何和所有文件 - 当我在 wwwroot 文件夹中使用随机名称制作随机测试文件时,它们确实得到了服务。)

      这里仍有一些问题,但它可以满足我的需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2019-01-19
        相关资源
        最近更新 更多