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

问题描述 投票:0回答:3

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

Startup.cs包含以下内容:

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

在这种情况下,当我尝试浏览webroot目录中的任何HTML文件(即project-dir / wwwroot)时,它不会被提供服务。 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或文件之类的名称在一个名为“core”的子文件夹中。请参阅下面的答案,了解我的发现。

asp.net-core
3个回答
3
投票

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

当你说“webroot”时,我只能猜测你是在谈论项目根目录,默认情况下不会提供。调用UseDefaultFiles()会稍微改变这种行为,以允许自动提供index.html等内容,但一般不会覆盖静态文件。

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


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功能”,然后添加“静态内容

0
投票

答案很简单,令人惊讶:

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

禁止的值是:

    exports
    core

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

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

但奇怪的是,“index.html”也不起作用。这只适用于我使用app.UseDefaultFiles()提供该文件的情况。

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

这里仍有一些不妥之处,但它适用于我需要的东西。

© www.soinside.com 2019 - 2024. All rights reserved.