禁用查询参数的Angular$http.get URL编码



我正在使用Flask-Restless创建我的API,它要求使用过滤器对象列表格式化查询参数。有效的查询遵循以下格式:

/api/person?q={"filters":[{"name":"firstName","op":"like","val":"Mike"}]}

(请参阅此处的Flask Restless查询文档。)

当我使用Angular的$http.get传递查询参数时,它们被编码在URL中并破坏查询:

GET /api/person?q=%7B%22filters%22:%7B%22name%22:%22firstName%22,%22op%22:%22like%22,%22val%22:%22Mike%22%7D%7D HTTP/1.1"

是否可以禁用所有或部分参数的编码?

更新的答案:

如果Angular是一个对象,默认情况下它会字符串化一个params值
因此,它将为您提供所有必要的工作,只需传递queryObject:

var queryObject = {filters: [...]};
$http.get('...', {params: {q: queryObject}});

您看到的是编码为URI组件的字符串化对象。

这可能不是由Angular完成的,而是由您的浏览器本身完成的
(例如,尝试对相同的URL进行简单的XHR,并在DevTools的"网络"面板中插入请求。)

我不熟悉Flask,但(如果它没有自动解码查询参数)它应该有一个手动解码的方法。

相关内容

  • 没有找到相关文章

最新更新