Статические файлы ASP.NET Core 2.0, но .html не работает?

naasking спросил: 28 марта 2018 в 03:55 в: c#

Это заставляет меня оторвать мои волосы. Я пытаюсь создать минимальное приложение ASP.NET Core 2.0, поэтому я создаю пустое веб-приложение в VS 2017, и я запускаю:

> uninstall-package Microsoft.AspNetCore.All
> install-package Microsoft.AspNetCore
> install-package Microsoft.AspNetCore.StaticFiles

My 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>

Затем я создайте wwwroot/test.txt с тем же содержимым, что и test.html. Таким образом, это, по-видимому, представляет собой установку с голыми костями, которая должна обслуживать любые статические файлы под wwwroot для более 400 известных типов MIME.

Теперь, когда я запускаю этот проект с помощью F5, он открывается корневой URL-адрес и отображает "Hello World!" как и ожидалось, указав, что он попал в "делегат терминального промежуточного ПО". Если вы добавите /test.txt в URL-адрес, вы получите отображаемый выше HTML-код, как и ожидалось. Если вы измените URL-адрес на /test.html, вы не получите файл HTML, как ожидалось, а вместо этого стандартный "Hello World!". сообщение.

Я пробовал это на двух отдельных машинах, таких же результатах. Теперь прекратите отладку, измените test.html на test.htm, повторите попытку и test.htm работает как ожидалось!

Мне показалось, что возможно, они просто не ассоциировали .html с "text / html" в FileExtensionContentTypeProvider, но нет, вот оно. Я даже попытался создать пользовательский тип поставщика явно с этой ассоциацией, но это тоже не сработало.

Может кто-нибудь подскажет мне, что здесь происходит? Или я единственный, кто сходит с ума, и этот пример отлично подходит для всех остальных?


1 ответ

Есть решение
naasking ответил: 28 марта 2018 в 04:23

Благодаря комментарию greg84, приведенному выше, я пересмотрел свои шаги и знаю, как все стало плохо. Я вошел в свойства проекта > Панель отладки для настройки URL-адреса запуска по умолчанию, но в какой-то момент я по ошибке добавил /test.html в параметр "URL приложения", поэтому он выглядел как "http:// localhost: 57661 / test.html".

Поняв, что я действительно собирался добавить его в раздел "Launch Browser", я исправил это, но ущерб уже нанесен. .vs/applicationhost.config уже сохранил его как отображение second application / virtualDirectory, которое прервало все ссылки на test.html.

Конечно, эти настройки не являются на самом деле он был виден в любом месте, пока я занимался расследованием, поэтому я продолжал преследовать себя, только получая испорченное поведение на своей единственной .html-странице, что не имело для меня никакого смысла.

И, конечно, перенос проекта на вторую машину просто переносил файл .vs / applicationhost.config с ним, поэтому появилось то же поведение.

Спасибо всем за предложения!