【发布时间】:2018-04-21 17:35:39
【问题描述】:
这让我把头发扯掉了。我正在尝试创建一个最小的 ASP.NET core 2.0 应用程序,因此我在 VS 2017 中创建了一个空的 Web 应用程序,然后运行:
> uninstall-package Microsoft.AspNetCore.All
> install-package Microsoft.AspNetCore
> install-package Microsoft.AspNetCore.StaticFiles
我的Startup.cs 看起来像:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
然后我用这些内容创建一个wwwroot/test.html:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>HTML</h1>
<p>Hello world!</p>
</body>
</html>
然后我创建一个与 test.html 内容相同的wwwroot/test.txt。所以这似乎是一个简单的设置,应该为超过 400 种已知的 MIME 类型提供wwwroot 下的任何静态文件。
现在,当我使用 F5 运行这个项目时,它会打开到根 URL 并显示“Hello World!”正如预期的那样,表明它击中了“终端中间件委托”。如果您将 /test.txt 添加到 URL,您将获得上面显示的 HTML,再次符合预期。如果您将 URL 更改为 /test.html,您将无法获得预期的 HTML 文件,而是标准的“Hello World!”消息。
我已经在两台不同的机器上尝试过,结果相同。现在停止调试,将test.html 更改为test.htm,再试一次,test.htm 按预期工作!
我突然想到一个疯狂的想法,也许他们根本没有将 .html 与 FileExtensionContentTypeProvider 中的“text/html”相关联,但不,there it is。我什至尝试使用此关联显式创建自定义类型提供程序,但这也不起作用。
谁能告诉我这里发生了什么?或者我是这里唯一一个发疯的人,这个例子对其他人都很好?
【问题讨论】:
-
静态文件工作正常,除了 .html。实际提供有用的反馈怎么样。
-
您是如何创建文件的?我刚刚创建了一个新项目,无法重现该问题。 .html 扩展名有效,其他一切都返回 Hello World 消息。
-
你说文件叫test.html,但是在你对URL的描述中,你写的是text.html。
-
我在 Visual Studio 中创建了该文件,就像任何其他文件一样。它与文件本身无关,因为如果我重命名扩展名,它就可以工作。这最初发生在另一个项目中,我启动了一个全新的项目来重现该问题。自从您创建了一个项目后,我有了另一个想法,进入项目属性 > 调试面板。在显示类似localhost:56945 的应用程序 URL 中,在末尾添加 test.html 并尝试。这是一个破坏它的错误,但即使在删除它之后,我认为它仍然会破坏 .html 静态文件。
标签: c# asp.net .net asp.net-core-2.0