使用$ resource发送ETag

时间:2014-07-28 03:11:23

标签: angularjs rest angular-resource

使用Angular JS的$ resource服务,有没有办法为资源的第二,第三等投票指定If-None-Match和ETag标头?

    var SummarySearch = $resource(<<apiurl>>,
        { },
        {
            get: {
                method: 'GET',
                headers: {
                    'x-header': 'id'
                }
            }
        });

我已经设置了一个常量标题(在这种情况下它只是x-header: id),但是根据我上次看到的ETag,我需要根据请求而变化的内容。

更新

transformRequest看起来很有希望,但我无权访问我发起请求的数据,或者数据最终的URL。据我所知,我只能访问我正在POST的主体(在我做GET时未定义)和headersGetter函数。

1 个答案:

答案 0 :(得分:4)

我发现$ resource自己处理ETag。

当我发布这个问题时,我没有实现服务器方面的事情。我设置了If-None-Match处理服务器端,我不得不在客户端上使用$ http服务,但是在我现有的$ resource .get调用中尝试了它,它处理设置If-None-Match在我第一次轮询资源后自动收起标题。

我正在重用在安装过程中返回$ resource的1个实例。

修改

我有真正的交易jQuery而不是jqLit​​e。这就是设置If-None-Match的地方。

    // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
    if ( s.ifModified ) {
        ifModifiedKey = ifModifiedKey || s.url;
        if ( jQuery.lastModified[ ifModifiedKey ] ) {
            jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
        }
        if ( jQuery.etag[ ifModifiedKey ] ) {
            jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
        }
    }