首页 > 解决方案 > MVC 表单提交需要带有 %20 的查询字符串而不是 '+'

问题描述

我的表单中有一个搜索输入类型。提交表单后,页面会重新加载带有 + 的查询参数

因此,如果我搜索abc def查询参数变为?q=abc+defurl 变为https://localhost:44300/Search?q=abc+def

现在,这将作为 api 调用发送到 webapi。所以然后在服务器端我+用空间替换然后在控制器上执行搜索。现在当我搜索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组件获取查询参数,并通过axios调用api控制器。/api/search

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

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

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

标签: c#asp.netasp.net-mvcvue.jsaxios

解决方案


你可以这样做。

Uri.EscapeUriString(request.Query)


推荐阅读