【问题标题】:ASP.NET Core 2.0 static files, but .html doesn't work?ASP.NET Core 2.0 静态文件,但 .html 不起作用?
【发布时间】: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


【解决方案1】:

感谢上面 greg84 的评论,我重新开始了我的步骤,我知道一切都变得无聊了。我已经进入项目属性 > 调试面板来设置默认启动 URL,但有一次我错误地将 /test.html 添加到“应用程序 URL”参数中,所以它看起来像“http://localhost:57661/test.html”。

在意识到我实际上打算将其添加到“启动浏览器”部分后,我更正了这一点,但已经造成了损害。 .vs/applicationhost.config 已经将其存储为 second 应用程序/virtualDirectory 映射,这破坏了对 test.html 的所有引用。

当然,在我调查时,这些设置实际上在任何地方都看不到,所以我只是在我的单个 .html 页面上出现了错误行为,这对我来说完全没有意义。

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

感谢大家的建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2018-08-04
    • 2018-07-15
    • 2018-10-17
    • 2019-10-26
    相关资源
    最近更新 更多