Box V2 API - 锁定/解锁在哪里?

时间:2014-05-16 17:54:08

标签: locking box-api unlock

2013年12月developer road map中有一条说明," 锁定/解锁 - 我们已经添加了对锁定和解锁文件到V2 API的支持。 "

我已经通过V2 API(针对c#)并且无法在任何地方找到它。我希望在 BoxFilesManager 类中找到一些东西,或者在 BoxFileRequest 类中传递给 UpdateInformationAsync

那么有没有办法锁定/解锁文件?

2 个答案:

答案 0 :(得分:0)

好问题。为了查看文件的当前锁定状态,请执行

GET https://api.box.com/2.0/files/7435988481/?fields=lock

如果文件没有锁定,你会得到这样的信息:

{
    "type": "file",
    "id": "7435988481",
    "etag": "0",
    "lock": null
}

如果你想锁定一个文件,你需要在/ files / endpoint上做一个PUT(更新),其中一个主体告诉我们什么类型的锁,以及何时释放它。像这样:

PUT https://api.box.com/2.0/files/7435988481/?fields=lock

{"lock": {
"expires_at" : "2014-05-29T19:03:04-07:00",
  "is_download_prevented": true
}
}

您将收到确认已创建锁定的回复:

{
    "type": "file",
    "id": "7435988481",
    "etag": "1",
    "lock": {
        "type": "lock",
        "id": "14516545",
        "created_by": {
            "type": "user",
            "id": "13130406",
            "name": "Peter Rexer gmail",
            "login": "prexer@gmail.com"
        },
        "created_at": "2014-05-29T18:03:04-07:00",
        "expires_at": "2014-05-29T19:03:04-07:00",
        "is_download_prevented": true
    }
}

答案 1 :(得分:0)

由于还没有锁定/解锁,我根据现有经理创建了一个锁管理器:

class BoxCloudLockManager : BoxResourceManager
{
    #region Lock/Unlock Classes
    [DataContract]
    internal class BoxLockRequestInfo
    {
        [DataMember(Name = "status")]
        public string Status { get; set; }
        //[DataMember(Name = "expires_at")]
        //public string ExpiresAt { get; set; }
        [DataMember(Name = "is_download_prevented")]
        public bool IsDownloadPrevented { get; set; }
    }

    [DataContract]
    internal class BoxLockRequest
    {
        [DataMember(Name = "lock")]
        public BoxLockRequestInfo Lock { get; set; }
    }
    #endregion

    const string LockFileString = "{0}/?fields=lock";

    public BoxCloudLockManager(IBoxConfig config, IBoxService service, IBoxConverter converter, IAuthRepository auth) 
        : base(config, service, converter, auth)
    {
    }

    public async Task<BoxLockInfo> LockAsync(string documentId,bool isDownloadPrevented = true)
    {
        var lockRequest = new BoxLockRequest { Lock = new BoxLockRequestInfo { Status = "lock", IsDownloadPrevented = isDownloadPrevented } };

        BoxRequest request = new BoxRequest(_config.FilesEndpointUri, string.Format(LockFileString, documentId))
            .Method(RequestMethod.Put)
            .Payload(_converter.Serialize(lockRequest));

        IBoxResponse<BoxLockInfo> response = await ToResponseAsync<BoxLockInfo>(request).ConfigureAwait(false);

        return response.ResponseObject;
    }

    public async Task<BoxLockInfo> UnlockAsync(string documentId)
    {
        BoxRequest request = new BoxRequest(_config.FilesEndpointUri, string.Format(LockFileString, documentId))
            .Method(RequestMethod.Put)
            .Payload("{\"lock\":null}");

        IBoxResponse<BoxLockInfo> response = await ToResponseAsync<BoxLockInfo>(request).ConfigureAwait(false);

        return response.ResponseObject;
    }

    public async Task<BoxLockInfo> GetLockInfoAsync(string documentId)
    {
        BoxRequest request = new BoxRequest(_config.FilesEndpointUri, string.Format(LockFileString, documentId))
            .Method(RequestMethod.Get);

        IBoxResponse<BoxLockInfo> response = await ToResponseAsync<BoxLockInfo>(request).ConfigureAwait(false);

        return response.ResponseObject;
    }
}

我从BoxClient派生了一个类,添加了一个LockManager并在构造函数中实例化它。

以下是锁定信息:

[DataContract]
public class BoxLockedBy
{
    [DataMember(Name = "type")]
    public string Type { get; set; }
    [DataMember(Name = "id")]
    public string Id { get; set; }
    [DataMember(Name = "name")]
    public string Name { get; set; }
    [DataMember(Name = "login")]
    public string Login { get; set; }
}

[DataContract]
public class BoxLockDetails
{
    [DataMember(Name = "type")]
    public string Type { get; set; }
    [DataMember(Name = "id")]
    public string Id { get; set; }
    [DataMember(Name = "created_by")]
    public BoxLockedBy CreatedBy { get; set; }
    [DataMember(Name = "created_at")]
    public string CreatedAt { get; set; }
    [DataMember(Name = "expires_at")]
    public string ExpiresAt { get; set; }
    [DataMember(Name = "is_download_prevented")]
    public bool IsDownloadPrevented { get; set; }
}

[DataContract]
public class BoxLockInfo
{
    [DataMember(Name = "type")]
    public string Type { get; set; }
    [DataMember(Name = "id")]
    public string Id { get; set; }
    [DataMember(Name = "etag")]
    public string Etag { get; set; }
    [DataMember(Name = "lock")]
    public BoxLockDetails LockDetails { get; set; }
}