Невозможно использовать вьетнамские / подписанные и пробельные символы в параметрах URL в Blazor - PullRequest
0 голосов
/ 04 ноября 2019

Я использую Blazor с .net core 3.0 для разработки веб-сайта, который позволяет передавать некоторые параметры в URL.

Проблема заключается в том, что всякий раз, когда я передаю вьетнамское ключевое слово в URL, Blazor выдает внутреннее исключение, котороеНа консоли браузера появляется

Обратите внимание, что Я не могу использовать Encode URL для извлечения этой информации, поскольку блазор сам создает исключения перед OnAfterRenderAsync вызовом

Работа

https://localhost:44316/?keyword=tieng viet
https://localhost:44316/?keyword=tieng%20viet

Не работа

https://localhost:44316/?keyword=tiếng việt
https://localhost:44316/?keyword=tiếng%20việt
https://localhost:44316/?keyword=ti%E1%BA%BFng%20vi%E1%BB%87t

Как воспроизвести:

  • Просто создайте совершенно новый проект Blazor с .net core 3.0.
  • Затем запустите проект и попробуйте использовать эти URL.

=> Так как я надеваюНе добавляйте здесь дополнительный код, блазор не должен выдавать никаких исключений

Вот исключение: Here is the exception

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Мне нужно каждый раз кодировать и декодировать

Не уверен, что это ошибка. Однако вам не нужно кодировать и декодировать каждый раз. В качестве обходного пути мы можем создать быстрое и грязное исправление, чтобы space в строке запроса преобразовывалось в +.

, так как эта ошибка возникает при вызове удаленного сигнала R ComponentHub::StartCircuit() метод, мы можем заменить местоположение до того, как оно будет передано в siganlR. На основании приведенного выше комментария @ mjwills , в котором предлагается localhost:44316/?keyword=ti%E1%BA%BFng+vi%E1%BB%87t, вы можете добавить script в свой _Host.cshtml, как показано ниже:

<script>
    !function(){
        var raw = new URL(window.location.href);
        raw.search = raw.search.replace("%20","+");    // replace the `%20` with "+"
        window.history.replaceState('', document.title, raw);
    }();
</script>
<script src="_framework/blazor.server.js"></script>

Таким образом, ваш код на стороне серверане нужно заботиться о кодировке.

0 голосов
/ 04 ноября 2019

Перво-наперво: это не относится к Blazor

Вы просто используете недопустимый URI. Каждый символ, используемый в URI, должен иметь соответствующие символы в таблице US-ASCII.

Blazor просто вызывает Uri.IsWellFormedUriString, который возвращает false для вашего данного примера.

Как и другие указалиРешение заключается в кодировании URL. Это должно быть сделано за до того URL, который используется для перехода на страницу блейзора.

...