ASP.NET Core-无法提供静态文件-仅默认

时间:2019-04-01 12:41:02

标签: asp.net-core

基本的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文件时”,但实际上我没有尝试“任何”文件,但我正在使用的文件要么具有exports.html,index.html之类的名称,要么称为“核心”的子文件夹。有关发现的内容,请参见下面的答案。

3 个答案:

答案 0 :(得分:3)

UseStaticFiles(),专门用于wwwroot项目目录。您可以根据需要自定义要提供服务的目录。

当您说“ webroot”时,我只能猜测您是在谈论项目根目录,默认情况下将不提供该根目录。调用UseDefaultFiles()会稍微改变此行为,以允许自动提供index.html之类的内容,但通常不会覆盖静态文件。

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

答案 1 :(得分:0)

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

Windows 7

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

Windows Server 2008

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

答案 2 :(得分:0)

答案很简单,令人惊讶:

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

禁止的值是:

    exports
    core

这意味着文件夹名和文件名都没有(例如,exports.html无法使用,并且子文件夹“ exports”也很麻烦。)

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

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

(要澄清的注意-当我在原始帖子中说“什么都没有得到”时,实际上没有得到得到的是名称为“ exports.html”的文件以及“核心”子文件夹中的所有文件。不会测试任何文件和所有文件-当我在wwwroot文件夹中创建具有随机名称的随机测试文件时,它们确实得到了服务。)

这里仍然有些不对劲,但是它可以满足我的需求。