2

基本上,我的应用程序需要的是能够在 Azure 移动服务的插入操作中接收刚刚创建的项目的 ID。我知道在服务器端我可以做一些事情

function insert(item, user, request)
{
  request.execute({
    function success() {
      request.respond(200, item.id);
    }
  });
}

我对此有一些问题。首先,当我只想添加所创建项目的 id 时,我完全覆盖了默认响应。其次,在客户端,我现在知道如何在调用 MobileServiceClient.InsertAsync 时访问响应正文

问题是在读取等操作中修改响应相当简单,但在响应中包含项目 ID 似乎要困难得多。关于如何做到这一点的任何想法?

对此事的进一步调查表明,数据(例如返回的对象)无论如何都已包含在响应中。我如何获得身份证?

4

1 回答 1

4

在服务器端,你不需要做任何事情——要插入的项目没有 id 字段就进入服务器,然后返回一个。例如,这是一个向表中插入数据的典型请求:

POST /tables/people HTTP/1.1
Content-Type: application/json
Content-Length: ...
Host: myservice.azure-mobile.net

{"name":"John Doe","age":33}

这将是它的回应:

HTTP/1.1 201 Created
Content-Type: application/json
Date: ...
Content-Length: ...

{"name":"John Doe","age":33,"id":234}

在客户端,您可以在请求完成后访问 id。如果您使用的是托管语言,则可以这样做:

var item = new Person { Name = "John Doe", Age = 33 };
await table.InsertAsync(item);
// When the call returns, the Id field is populated with the id from the server
var newId = item.Id;

或者在 JavaScript 中:

var item = { name: 'John Doe', age: 33 };
table.insert(item).done(function(inserted) {
    var id = inserted.id;
});

或者在 Objective-C 中:

NSDictionary *item = @{@"name":@"John Doe",@"age":@33};
[table insert:item completion:^(NSDictionary *inserted, NSError *insertError) {
    NSNumber *id = [inserted objectForKey:@"id"];
}];
于 2013-07-30T15:04:31.667 回答