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