RequestPath в UseStaticFiles и символ тильды - PullRequest
0 голосов
/ 14 февраля 2019

После использования

app.UseStaticFiles(requestPath: "/static")

путь, генерируемый через

<link rel="stylesheet" href="~/css/global.css"/>

, равен

<link rel="stylesheet" href="/css/global.css"/>

вместо ожидаемого

<link rel="stylesheet" href="/static/css/global.css"/>

Как можно обновить логику генерации пути символа тильды для использования requestPath?

1 Ответ

0 голосов
/ 14 февраля 2019

Тильда используется для обозначения корня приложения.Например, если ваше приложение настроено на использование другой базы путей (с использованием UsePathBase()), то эта база путей учитывает входящие запросы при использовании динамических путей с использованием символа тильды.

Однако этот символне ярлык для достижения корня статических файлов.Вполне допустимо использовать относительный к приложению путь с использованием тильды для достижения нестатического пути, например, если у вас есть какое-то другое промежуточное ПО, которое может отвечать на запросы.

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

  • Когда вы делаете app.UseStaticFiles(requestPath: …), этот путь хранится только локально в промежуточном ПО статического файла.Информация об этом корне не доступна извне.
  • Технически, вы можете полностью использовать несколько статических файловых промежуточных программ, вызывая UseStaticFiles() несколько раз с различными конфигурациями.Таким образом, не было бы способа правильно узнать, к какому корневому статическому файлу вы обращаетесь.

Я бы порекомендовал вам по умолчанию использовать промежуточное ПО статических файлов.Таким образом, статические файлы, такие как favicon.ico, преимущество которых заключается в том, что они находятся в корневом каталоге, могут по-прежнему корректно обслуживаться.Если вы хотите, чтобы ваши файлы находились в подпути, попробуйте просто создать подпапку внутри wwwroot.Таким образом, вы также получите правильный IntelliSense при использовании тильды в своих представлениях Razor.

...