ASP.NET Core 2.0静态文件,但.html不起作用?

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

这让我把头发撕掉了。我正在尝试创建一个最小的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添加到URL,则会再次按预期显示上面显示的HTML。如果您将URL更改为/test.html,则不会按预期获取HTML文件,而是标准的“Hello World!”。信息。

我在两台独立的机器上试过这个,结果相同。现在停止调试,将test.html更改为test.htm,再试一次,test.htm按预期工作!

一个疯狂的想法发生在我身上,也许他们根本没有将.html与FileExtensionContentTypeProvider中的“text / html”联系起来,但是nope,there it is。我甚至尝试使用此关联显式创建自定义类型提供程序,但这也不起作用。

谁能让我知道这里发生了什么?或者我是唯一一个疯狂的人,这个例子适用于其他人吗?

c# asp.net .net asp.net-core-2.0
1个回答
0
投票

感谢上面的greg84评论,我回顾了我的步骤,我知道一切都被塞满了。我已经进入项目属性>调试面板来设置默认启动URL,但有一次我错误地将/test.html添加到“App URL”参数,所以它看起来像“http://localhost:57661/test.html”。

在意识到我实际上打算将它添加到“启动浏览器”部分后,我更正了,但已经完成了损坏。 .vs/applicationhost.config已经将它存储为第二个application / virtualDirectory映射,它打破了对test.html的所有引用。

当然,在我调查时,这些设置实际上并不可见,所以我只是在我的单个.html页面上只是破坏了行为,这对我来说完全没有意义。

当然,将项目移动到第二台机器只是随身携带.vs / applicationhost.config文件,因此出现了相同的行为。

感谢大家的建议!

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