基本的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”的子文件夹中。请参阅下面的答案,了解我的发现。
UseStaticFiles()
,专门为wwwroot
项目目录服务。您可以根据需要自定义提供的目录。
当你说“webroot”时,我只能猜测你是在谈论项目根目录,默认情况下不会提供。调用UseDefaultFiles()
会稍微改变这种行为,以允许自动提供index.html
等内容,但一般不会覆盖静态文件。
你能做的最好的事情就是把所有东西放在wwwroot
。当使用静态文件中间件时,任何东西都将自动映射到文档根目录,因此wwwroot/index.html
将在https://example.com/index.html
上提供,同样,任何静态资源(如JS或CSS)也将可用。
也许IIS服务器不提供JS,CSS和图像文件(静态文件)。在某些部署中发生在我身上试试这个
Windows 7的
Windows Server 2008
答案很简单,令人惊讶:
显然,ASPNetCore不接受某些字符串作为文件夹和文件名。
禁止的值是:
exports
core
这意味着文件夹名称和文件名(即exports.html不起作用,子文件夹'exports'也会造成麻烦。)
这是我找到的两个,因为这些名字出现在我的目录中。可能有,也可能是其他名称。我在任何地方都没有找到相关文档
但奇怪的是,“index.html”也不起作用。这只适用于我使用app.UseDefaultFiles()提供该文件的情况。
(请注意澄清 - 当我在原始帖子中说“没有得到服务”时,实际上没有得到的是名为“exports.html”的文件,以及“核心”子文件夹中的任何文件。我没有测试任何和所有文件 - 当我在wwwroot文件夹中随机编写随机测试文件时,他们确实得到了服务。)
这里仍有一些不妥之处,但它适用于我需要的东西。