ASP.NET Core - не может обслуживать статические файлы - только по умолчанию - PullRequest
0 голосов
/ 01 апреля 2019

Базовое веб-приложение ASP.NET Core 2.1.

Startup.cs содержит следующее:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseMvc();
}

В этом сценарии, когда я пытаюсь перейти к любому HTML-файлу в каталоге webroot (например, project-dir / wwwroot), он не обрабатывается. Каталог webroot содержит файл index.html и второй файл HTML. Ничего нельзя обслужить, набрав URL.

Если я изменю Startup.cs на файлы по умолчанию, например:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseMvc();
}

тогда файл index.html обслуживается. Даже если я введу имя другого файла HTML, я получу файл index.html (согласно документам). Таким образом, по-видимому, автору URL, вызванному UseDefaultFiles(), удается правильно это обработать, но почему он не работает по прямому URL?

EDIT Я сказал выше «когда я пытаюсь перейти к любому HTML-файлу в webroot», но на самом деле я не пробовал «любой» файл, кроме тех, над которыми я работал, у которых были имена, такие как exports.html, index.html или файлы в подпапка называется "ядро". Смотрите мой ответ ниже, что я нашел.

Ответы [ 3 ]

3 голосов
/ 01 апреля 2019

UseStaticFiles(), специально обслуживает только каталог проекта wwwroot.Вы можете настроить, какие каталоги будут обслуживаться, если хотите.

Когда вы говорите «webroot», я могу только предположить, что вы говорите о корне проекта, который по умолчанию не будет обслуживаться.Вызов UseDefaultFiles() несколько меняет это поведение, позволяя автоматически обслуживать такие вещи, как index.html и т. Д., Но не распространяется на статические файлы в целом.

Лучшее, что вы можете сделать, это просто поместить все в wwwroot.Все, что там будет сопоставлено с корнем документа автоматически при использовании промежуточного программного обеспечения для статических файлов, поэтому wwwroot/index.html будет доступно по адресу https://example.com/index.html, и аналогично, любые статические ресурсы, такие как JS или CSS, будут также доступны.

0 голосов
/ 01 апреля 2019

Ответ прост и удивителен:

По-видимому, ASPNetCore не принимает определенные строки в качестве имен папок и файлов.

Запрещенные значения:

    exports
    core

И это означает, что как для имен папок, так и для имен файлов (т. Е. Export.html не будет работать, а подпапка 'export' также создает проблемы.)

Это два, которые я нашел, потому что эти имена встречались в моем каталоге,Могут быть и, возможно, есть другие имена.Я не нашел никакой документации по этому вопросу

Но, что любопытно, "index.html" тоже не работает.Это работает ТОЛЬКО если я обработаю этот файл с помощью app.UseDefaultFiles ().

(Примечание, чтобы уточнить - когда я сказал в своем первоначальном посте «ничего не обслуживается», на самом деле не обслуживались файлы с именем «exports.html» и любые файлы в «ядре»вложенная папка. Я не проверял все файлы - когда я делал случайные тестовые файлы со случайными именами в папке wwwroot, они действительно обслуживались.)

Здесь все еще что-то не так, но это работает для того, что мне нужно.

0 голосов
/ 01 апреля 2019

Возможно, сервер IIS не обслуживает файлы JS, CSS и изображения (статические файлы). это случилось со мной в каком-то развертывании Попробуйте это

Windows 7

  1. Нажмите Пуск, перейдите в Панель управления и выберите Программы.
  2. В разделе «Программы и компоненты» выберите «Включить или отключить функции Windows». Откроется диалоговое окно «Функции Windows».
  3. Разверните элемент корневого уровня Internet Information Services, разверните World Wide Web Services, а затем разверните Common HTTP Features. Выберите статическое содержимое.

Windows Server 2008

  1. Нажмите Пуск, выберите Все программы
  2. Выберите Администрирование, а затем выберите Диспетчер серверов.
  3. На панели навигации выберите Роли, а затем выберите Добавить роли.
  4. В окне «Перед началом работы» нажмите «Далее».
  5. Перейдите в окно Выбор ролей сервера> Веб-сервер (IIS)> Далее> Далее.
  6. В окне Выбор службы ролей разверните Общие функции HTTP. затем добавьте статический контент
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...