这让我把头发撕掉了。我正在尝试创建一个最小的ASP.NET核心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
。所以这似乎是一个简单的骨骼设置,应该为wwwroot
下的任何静态文件提供超过400种已知的MIME类型。
现在,当我使用F5运行此项目时,它会打开根URL并显示“Hello World!”正如所料,表明它击中了“终端中间件代表”。如果您向网址添加/test.txt
,则会再次按预期获得上面显示的HTML。如果您将URL更改为/test.html
,则不会按预期获得HTML文件,而是标准的“Hello World!”消息。
我在两台独立的机器上试过这个,结果相同。现在停止调试,将test.html
更改为test.htm
,再试一次,test.htm
按预期工作!
我想到了一个疯狂的想法,也许他们根本没有将.html与FileExtensionContentTypeProvider
中的“text / html”联系起来,但是没有there it is。我甚至尝试使用此关联显式创建自定义类型提供程序,但这也不起作用。
有谁能告诉我这里发生了什么?或者我是唯一一个疯狂的人,这个例子适用于其他人吗?
答案 0 :(得分:0)
感谢上面的greg84评论,我回顾了我的步骤,我知道一切都被淹没了。我进入了项目属性&gt;调试面板设置默认启动URL,但有一次我错误地将/test.html
添加到&#34; App URL&#34;参数,所以它看起来像&#34; http://localhost:57661/test.html&#34;。
在意识到我实际上打算将其添加到&#34;启动浏览器&#34;部分,我纠正了,但损坏已经完成。 .vs/applicationhost.config
已将其存储为第二个应用程序/ virtualDirectory映射,这打破了对test.html的所有引用。
当然,在我调查时,这些设置实际上并不可见,所以我只是在我的单个.html页面上只是破坏了行为,这对我来说毫无意义。
当然,将项目移动到第二台机器只需携带.vs / applicationhost.config文件,因此出现了相同的行为。
感谢大家的建议!