Для отправки формы MVC требуется строка запроса с% 20, а не с '+' - PullRequest
0 голосов
/ 31 января 2019

У меня есть поисковый тип ввода в моей форме.Когда форма отправлена, страница перезагружается с параметрами запроса с +

Так что, если я ищу abc def, параметр запроса становится ?q=abc+def, URL становится https://localhost:44300/Search?q=abc+def

Теперь этоотправлено в webapi как вызов API.поэтому на стороне сервера я заменяю + пробелом, а затем выполняю поиск на контроллере.Теперь, когда я ищу abc def+efg, он становится abc+def%2Bdef

request.Query = request.Query.Replace('+', ' ');
request.Query = HttpUtility.UrlDecode(request.Query);

Так что на стороне сервера я сначала заменяю параметр + s пробелом, затем декодирую его и, наконец, получаю abc def+efgна контроллере, который я искал.

Всего этого можно было бы избежать, если бы при отправке формы был закодирован URL-адрес.так что если с самого начала параметром запроса было ?q=abc%20def%2Befg, мне просто нужно было бы его декодировать.

Как это сделать?

Редактировать

Сначала выполняется рендеринг страницы, затем компонент vue получает параметр запроса и выполняет вызов контроллера api с помощью axios./api/search

const searchQuery = this.$router.getQueryParam('q');

this.queryParams.query = searchQuery ? searchQuery : null;

return axios.get(`/api/search`, {
  params: queryParams,
});

Ответы [ 2 ]

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

Вы можете сделать это следующим образом.

Uri.EscapeUriString (request.Query)

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

Если вы отправляете form, urleconding будет применен автоматически.Поскольку вы получаете и отправляете поисковый запрос без отправки формы, просто примените функцию javascript для кодирования этого извлеченного значения:

this.queryParams.query = searchQuery ? encodeURI(searchQuery): null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...