AngularJS $resource使用DELETE时的查询字符串问题
如何让Angular $resource的DELETE请求使用路径参数而非查询字符串?
你的代码定义了一个用于删除资源的Angular $resource工厂:
.factory('DeleteResource', ['config', '$resource', function (config, $resource) { return $resource(config.myhost + '/my-path/:id', { id: '@id' }, { delete: { method: 'DELETE' } }); }])
目前遇到的问题是:使用POST方式调用时,请求URL为https://my-host/my-path/1(路径参数格式),但改用DELETE方式后,URL变成了https://my-host/my-path?id=1(查询字符串格式),需要让DELETE请求也采用路径参数的格式。
解决方法:
方法一:在自定义DELETE动作中显式指定参数映射
虽然你已经在$resource的默认参数中设置了{ id: '@id' },但需要在自定义的DELETE动作配置里再次明确params属性,确保参数被绑定到路径变量上:.factory('DeleteResource', ['config', '$resource', function (config, $resource) { return $resource(config.myhost + '/my-path/:id', { id: '@id' }, { delete: { method: 'DELETE', params: { id: '@id' } // 显式指定参数映射 } }); }])方法二:使用资源实例的
$delete()方法
不要直接调用静态的DeleteResource.delete(),而是先通过get或query获取资源实例,再调用实例的$delete()方法。这样Angular会自动将实例的id属性绑定到路径参数中:// 先获取资源实例 var myResource = DeleteResource.get({ id: 1 }); // 调用实例的删除方法 myResource.$delete();方法三:调用静态方法时确保参数正确传递
如果坚持使用静态方法,需要确保传递的参数对象中的id会被解析到路径变量,而不是作为查询参数。直接传递包含id的对象即可:DeleteResource.delete({ id: 1 });注意:此方式需要确保$resource配置中,路径变量
:id已正确关联到参数id(即默认参数中的{ id: '@id' })。
这些方法都能让DELETE请求的URL格式变为https://my-host/my-path/1,符合你的需求。
内容的提问来源于stack exchange,提问作者user3174311
相关产品推荐
相关产品推荐

