提交MVC表单时需要查询字符串,其中包含%20,而不是'+'

时间:2019-01-31 17:54:07

标签: c# asp.net asp.net-mvc vue.js axios

我的表单中有一个搜索输入类型。提交表单后,页面会使用+

重新加载查询参数

因此,如果我搜索abc def,则查询参数将变为?q=abc+def,网址将变为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);

因此,在服务器端,我首先用空格字符替换参数+,然后对其进行解码,最后在控制器上得到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,
});

2 个答案:

答案 0 :(得分:0)

如果您提交的是form,则将自动应用阅览。由于您是在不提交表单的情况下获取和发送搜索查询的,因此只需应用JavaScript函数即可对获取的值进行编码:

this.queryParams.query = searchQuery ? encodeURI(searchQuery): null;

答案 1 :(得分:0)

您可以这样做。

Uri.EscapeUriString(request.Query)