【问题标题】:Colons not being URL encoded in resource parameters冒号未在资源参数中进行 URL 编码
【发布时间】:2016-01-29 10:54:33
【问题描述】:

我正在使用 Angular 的 Resource 模块来访问 Web API,但我遇到了问题,因为 API 使用 URI 作为主键。

每当我尝试调用此 API 时,将 URI 作为字符串参数传递,我都会收到 400 Bad Request 错误。仔细观察,Resource 转义了 URI 中的所有正斜杠,但没有转义开头的冒号。它正在对如下所示的 URL 执行 GET:http://myserver/api/objects/http:%2F%2Fexample.comk%2FmyURI%2F,这当然是无效的。我也试过用反斜杠转义冒号,但这也不起作用。

如何使 Resource 正确转义我的参数?在拨打电话之前,我尝试用%3A 替换冒号,但这会导致% 再次被编码,返回404 Not Found

服务处理资源如下所示:

angular.module('adminApp').factory('MyObject', myObject);

function myObject($resource) {
    return $resource('/api/objects/:uri');
};

我这样称呼它:

MyObject.get({ uri: myUri }, function(result) {
...
});

【问题讨论】:

  • 您是否尝试在冒号前添加反斜杠?
  • @Voreny 是的,最终看起来像这样:http://myserver/api/objects/http%5C:%2F%2Fexample.comk%2FmyURI%2F,所以没有更好的!

标签: angularjs urlencode url-encoding angular-resource


【解决方案1】:

我通过将 URI 作为查询参数而不是作为请求 URL 的一部分传递来解决这个问题。我通过将资源服务更改为此:

angular.module('adminApp').factory('MyObject', myObject);

function myObject($resource) {
    return $resource('/api/objects');
};

并保持调用代码不变。 ngResource 然后创建一个看起来像http://myserver/api/objects?uri=http:%2F%2Fexample.comk%2FmyURI%2FGET,这很好。

基本上,如果您在 API 参数中使用不寻常的字符,请将它们放在查询字符串中而不是 URL 中! :-)

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2012-04-21
    • 2010-09-11
    • 2016-07-07
    相关资源
    最近更新 更多