AngularJS资源:如何禁用URL实体编码

多重点击

在我当前的项目中,我有一个drupal后端,它为我的前端公开了休息服务。对后端的某些调用并不真正喜欢对URL实体进行编码。

所以我的问题是:如何禁用某些参数的URL编码?

例:

我需要在不同的搜索字词之间用“ +”号来调用我的后端。像这样:

http://backend.com/someservice/search/?terms=search+terms+here

但是有角度,设置像这样:

var resource = $resource(
  backendUrl + '/views/:view', {},
    {
      'search': {params:{view:'searchposts'}, isArray:true}
    }
 );

// search posts for the given terms
this.searchPosts = function(terms, limit) {
  resource.search({search:terms.join('+'), limit:limit});
};

调用以下网址:

http://backend.com/someservice/search/?terms=search%2Bterms%2Bhere

有什么建议么?谢谢!

彼得·赫罗林(Pieter Herroelen)

更新:使用Angular 1.4中新的httpParamSerializer,您可以编写自己的paramSerializer并设置$httpProvider.defaults.paramSerializer

以下内容仅适用于AngularJS 1.3(及更低版本)。

不更改AngularJS的源代码是不可能的。

这是通过$ http完成的:

https://github.com/angular/angular.js/tree/v1.3.0-rc.5/src/ng/http.js#L1057

function buildUrl(url, params) {
      if (!params) return url;
      var parts = [];
      forEachSorted(params, function(value, key) {
        if (value === null || isUndefined(value)) return;
        if (!isArray(value)) value = [value];

        forEach(value, function(v) {
          if (isObject(v)) {
            v = toJson(v);
          }
          parts.push(encodeUriQuery(key) + '=' +
                     encodeUriQuery(v));
        });
      });
      if(parts.length > 0) {
        url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
      }
      return url;
}

encodeUriQuery使用标准encodeUriComponentMDN),该标准将'+'替换为'%2B'

太糟糕了,您不能覆盖encodeUriQuery它,因为它是角度函数内部的局部变量。

因此,我看到的唯一选择是覆盖window.encodeURIComponent我已经在$ http拦截器中做到了,以最大程度地减少影响。请注意,只有在响应返回时才放回原始功能,因此在您的请求正在进行时,此更改是全局(!!)。因此,请确保测试这是否不会破坏应用程序中的其他内容。

app.config(function($httpProvider) {
  $httpProvider.interceptors.push(function($q) {
    var realEncodeURIComponent = window.encodeURIComponent;
    return {
      'request': function(config) {
         window.encodeURIComponent = function(input) {
           return realEncodeURIComponent(input).split("%2B").join("+"); 
         }; 
         return config || $q.when(config);
      },
      'response': function(config) {
         window.encodeURIComponent = realEncodeURIComponent;
         return config || $q.when(config);
      }
    };
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS $资源URL截距URL编码

来自分类Dev

AngularJS-如何禁用从URL的访问

来自分类Dev

如何禁用Apache Http Cleint 4.3 URL编码

来自分类Dev

如何通过实体框架禁用自动创建Azure SQL数据库资源

来自分类Dev

如何在AngularJS控制器中编码URL

来自分类Dev

如何禁用Greasemonkey的智能编码?

来自分类Dev

如何保存网络资源,将解码应用于URL编码字符?

来自分类Dev

如何在Angular 8中的[routerLink]上禁用动态生成的URL编码?

来自分类Dev

如何禁用AngularJS链接?

来自分类Dev

AngularJS $ resource url截取url编码

来自分类Dev

如何避免在AngularJS中对URL(或路由)进行硬编码?(提供URL解析)

来自分类Dev

AngularJS uri组件如何编码

来自分类Dev

如何禁用实体框架创建Nullable属性的

来自分类Dev

如何禁用 EntityType 的实体自动加载?

来自分类Dev

如何解开angularjs资源?

来自分类Dev

AngularJS:避免使用$ location进行url编码

来自分类Dev

防止AngularJS路由中的url编码

来自分类Dev

AngularJS:避免使用$ location进行url编码

来自分类Dev

$资源更新在URL angularjs中发送参数

来自分类Dev

如何编码“ ..”以用于URL路径?

来自分类Dev

如何对汉字进行URL编码?

来自分类Dev

如何从编码的URL获取参数?

来自分类Dev

Nginx在写入访问日志时禁用或解码URL编码

来自分类Dev

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

来自分类Dev

如何禁用Slack URL建议?

来自分类Dev

如何将图像资源编码为base64?

来自分类Dev

如何将图像资源编码为base64?

来自分类Dev

PHP如何将文本编码为数字实体?

来自分类Dev

如何在Symfony中为任意实体的密码编码?

Related 相关文章

热门标签

归档