Почему / в моем фрагменте URL-адреса преобразуется в %2F в ASP.NET Core?C#

Место общения программистов C#
Ответить
Anonymous
 Почему / в моем фрагменте URL-адреса преобразуется в %2F в ASP.NET Core?

Сообщение Anonymous »

Я работаю над проектом страниц ASP.NET Core Razor, где у меня есть URL-адреса, включающие как код культуры, так и фрагмент, разделенные косой чертой (

Код: Выделить всё

/). Эта структура помогает идентифицировать разные языковые версии контента. Например, URL курса может выглядеть так:
https://localhost:7213/CourseDetails/en/learn-english-in-99-days
В базе данных я храню эти фрагменты как одну строку в формате Culture/slug, например: Однако, когда я пытаюсь передать этот фрагмент в URL-адресе, он часто кодируется URL-адресом в %2F или декодируется в пространство при определенных условиях. Это происходит, даже если я передаю пулю косой чертой (), и это кажется противоречивым.
Пример проблемы
  • В базе данных у меня есть пул, хранящийся как en/learn-english-in-99-days.
  • Когда я перехожу по URL-адресу в браузере следующим образом:

    Код: Выделить всё

    https://localhost:7213/CourseDetails/en%2Flearn-english-in-99-days
    
    Браузер преобразует %2F в косую черту, в результате чего получается следующий URL:

    Код: Выделить всё

    https://localhost:7213/CourseDetails/en/learn-english-in-99-days
    
  • Когда ASP.NET Core обрабатывает запрос, преобразованный URL-адрес (с / вместо %2F) не соответствует пулу, хранящемуся в базе данных. Это вызывает проблемы, например невозможность найти курс и возврат ошибки 404.
Что я сделал попробовал
  • Пользовательское промежуточное ПО: я попытался создать промежуточное ПО, чтобы заменить %2F на / в пути запроса, но это по-прежнему приводило к проблемам, когда браузер отображал декодированный путь с косой чертой.
  • < Strong>Ручное кодирование и декодирование: я использовал Uri.UnescapeDataString для декодирования идентификатора в обработчике OnGet на моей странице Razor, но это все еще не решает проблему полностью, поскольку кодирование и декодирование выглядит непоследовательным.
Вопрос
Почему слэш () преобразуется в %2F или иногда в пробел, даже если он хранится в базе данных как обычная косая черта? Как я могу поддерживать правильную кодировку/декодирование, чтобы URL-адрес соответствовал формату, хранящемуся в базе данных, и позволял мне получить правильный ресурс?
Среда
  • Страницы ASP.NET Core Razor
    Локальный запуск с такими URL-адресами, как https://localhost
Буду очень признателен за любые советы о том, как решить проблемы с кодировкой URL-адресов с помощью косых черт в ASP.NET Core, или предложения по структурированию моих маршрутов во избежание этой проблемы!< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... p-net-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»