繁体   English   中英

使用AngularJS,我不想设置全局$ http.defaults.headers.common。 我可以在每次$ resource调用时发送自定义标头吗?

[英]With AngularJS, I don't want to set the global $http.defaults.headers.common. Can I send my custom header with each $resource call?

我正在调用一个我无法控制的后端服务器。 目前它正在使用这样的jQuery ajax:

return $.ajax({
    type: "POST",
    url: "/api/cases/store",
    contentType: "application/json",
    data: JSON.stringify(parameters),
    headers: { "Authorization": cred } : {}
}) // ... etc.

我想将它转换为使用$resource服务,并让它工作

$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();

唯一的问题是我必须使用auth凭据设置全局$http服务默认值。

我看到你应该能够通过$http调用传递自定义标头,现在使用$resource调用,但是我找不到任何关于如何在我的情况下执行此操作的示例(使用POST) 。

我在AngularJS文档中也找不到任何相关内容。 你们怎么想出这个东西? 文档非常糟糕!

而不是这个:

$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();

做这个:

return $resource('/api/cases/store', {}, {
    save: {
        method: 'POST',
        headers: { 'Authorization': cred }
    }
}).save();

请注意,您必须使用“保存”作为操作,第三个参数中的第一个键。 无法测试,所以让我知道它是否有效。

并且我同意。 文档没有谈论它。 看一下angular-resource.js中$ resource源代码中的DEFAULT_ACTIONS列表

$ resource文档确实涵盖了它,尽管阅读肯定很难。 您必须为其执行自定义操作,并且您可以传递给配置的所有参数都不会列在$ resource页面上。 您需要查看$ http docs页面,了解配置对象的可能性。

$resource()有3个参数:URL,默认参数对象和actions对象。 动作基本上将方法名称映射到$ http configs。

您想要进行自定义操作,例如:

var MyResource = $resource('/myendpoint/', {}, { 'post': { method: 'POST', headers: {"Authorization" : cred}}); // and any other $http options you might want

这些操作转换为MyResource对象上的方法,因此如果您愿意,您可以将操作命名为更加语义而不仅仅是“发布”(例如,文档页面上的示例为信用卡资源设置了“收费”操作,例如)。

$ http的文档非常可靠,与其网站上的大多数其他文档一样。

并且您可以在每个单独的AJAX调用上绝对定义您的auth标头。

尝试这样的事情:

$http({
    method: 'POST',
    url: 'serverUrl',
    data: parameters,
    headers: { Authorization: cred }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM