MVC 表单提交需要查询字符串,其中 %20 不带有 '+'



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

因此,如果我搜索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.查询)

最新更新