我的表单中有一个搜索输入类型。提交表单后,页面会使用+
重新加载查询参数因此,如果我搜索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,
});
答案 0 :(得分:0)
如果您提交的是form
,则将自动应用阅览。由于您是在不提交表单的情况下获取和发送搜索查询的,因此只需应用JavaScript函数即可对获取的值进行编码:
this.queryParams.query = searchQuery ? encodeURI(searchQuery): null;
答案 1 :(得分:0)
您可以这样做。
Uri.EscapeUriString(request.Query)