Проблема в том, что вы используете относительные URL-адреса и в зависимости от наличия или отсутствия косой черты в конце базового URL-адреса они будут обрабатываться по-разному.
С косой чертой в конце базовый URL интерпретируется как каталог, поэтому наличие ссылки на что-то вроде link1
будет интерпретироваться как под этим каталогом.
Без косой черты в конце базовый URL интерпретируется как файл , поэтому ссылка на что-то вроде link1
будет интерпретироваться как одноуровневый элемент в том же каталоге, т.е. часть пути, по которой имеет косую черту.
Это не имеет никакого отношения к вашему приложению, а именно к тому, как относительные URL обрабатываются всеми браузерами. Исправление заключается в использовании относительных абсолютных URL-адресов для ссылок, изображений, сценариев и т. Д. По сути, это означает, что вы ссылаетесь на все, начиная с корневого уровня документа, с предыдущей косой чертой. Итак, вместо чего-то вроде:
<a href="link1">Link 1</a>
Вместо этого используйте:
<a href="/subfolder1/subfolder2/link1">
Таким образом вы устраняете неоднозначность того, как должны объединяться пути к базовому URL и URL-адресу ссылки, и это всегда хороший URL-адрес независимо от наличия завершающей косой черты.
Что касается ASP.NET Core, если вы используете встроенную функцию генерации URL, он будет обрабатывать прикрепление таких вещей, как виртуальные пути, к началу ваших ссылок для вас. Например, если ваш сайт размещен в виртуальном каталоге вашего домена по адресу /subfolder1
, то когда вы делаете что-то вроде:
<a asp-action="Link1Action" asp-controller="Subfolder2">Link 1</a>
Тогда сгенерированный атрибут href будет правильным /subfolder1/subfolder2/link1
.
Вы также можете использовать Url.Content
, который будет отображаться в корне документа вашего сайта:
<a href="@Url.Content("~/subfolder2/link1")">Link 1</a>
Затем, предполагая, что ваш root - http://hostname/subfolder1
, он снова создаст правильный URL, который вам нужен. В представлениях Razor вы также можете обозначить это просто:
<a href="~/subfolder2/link1`>Link 1</a>
Конструкция ~/
не поддерживается в URL-адресах, но Razor понимает это как ссылку на корневой каталог вашего документа и будет анализировать и заменять правильный URL-адрес при отображении вашего ответа для ответа.