Dynami c ссылка вызывает выход из системы - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть приложение. Net Core 2.1, использующее стандартную модель идентификации для входа пользователя. Одна (MVC) страница содержит список ссылок, которые генерируются динамически в зависимости от выбора пользователя. Проблема заключается в том, что во время сеанса браузера fre sh (недавно открытое окно инкогнито), как только пользователь нажимает одну из этих динамически созданных ссылок, он возвращается на экран входа в систему. После входа в систему все работает нормально. Пользователь может щелкнуть эти ссылки и не должен снова входить в систему. Дополнительным осложнением является то, что это происходит только тогда, когда проект опубликован на тестовом сервере, а не в разработке. Я попытался обновить идентификатор пользователя cook ie по прибытии на соответствующую страницу. Я подтвердил, что это сработало, но не решило проблему. Похоже, что это связано с поваром по борьбе с подделкой ie, но до сих пор все мои усилия провалились.

По мнению, такие ссылки, как следующие, работают нормально:

<a asp-action="action" asp-controller="controller">link 1</a>

Однако использование JavaScript для динамического введения ссылки вызывает загадочную проблему выхода из системы, как описано:

<div id="test2"></div>

...

<script>
  $(document).ready(function () {
    $("#test2").html("<a href='/controller/action/'>link 2</a>");
  });
</script>

Я знаю, что существует много способов создания таких динамических c ссылок, и я пробовал несколько маршруты, но эта упрощенная версия повторяет мою проблему.

Заранее благодарим за понимание этой проблемы.

1 Ответ

0 голосов
/ 22 апреля 2020

Я наконец выяснил источник своей проблемы и обнаружил, что в моем исходном вопросе отсутствовала критическая деталь. Я публикую это как ответ на случай, если кто-то столкнется с этой же проблемой, и поэтому у меня будет достаточно места, чтобы расширить мои объяснения. Мои среды разработки и тестирования имеют разные пути к веб-приложению. По этой причине я написал функцию JavaScript для получения базового URL-адреса перед добавлением контроллера и пути действия. В своем вопросе я упростил свой сценарий до:

$("#test2").html("<a href='/controller/action/'>link 2</a>");

На самом деле это было больше похоже на:

$("#test2").html("<a href='" + GetBaseUrl() + "controller/action/'>link 2</a>");

function GetBaseUrl() {
    return "//" + window.location.host + "/";
}

Оказывается, эта маленькая функция была виновником. Я до сих пор не понимаю, почему это вызвало проблему (и я не гуру JavaScript, так что, вероятно, есть лучший способ сделать это), но это определенно была проблема.

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

$("#test2").html("<a href='@Url.Action("action", "controller")'>link 2</a>");

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

$("#test2").html("<a href='../../controller/action/'>link 2</a>");

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...