> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PUT (/users/xuid(xuid)/lists/PINS/{listname})

> PUT (/users/xuid(xuid)/lists/PINS/{listname})

# PUT (/users/xuid(xuid)/lists/PINS/{listname})

根据请求正文中为每个项指定的索引更新列表中的项。
这些 URI 的域为 `eplists.xboxlive.com`。

* [备注](#ID4EV)
* [URI 参数](#ID4E1B)
* [授权](#ID4EFC)
* [HTTP 状态代码](#ID4ESC)
* [必需的请求标头](#ID4EPH)
* [请求正文](#ID4EGBAC)
* [响应正文](#ID4EWBAC)

## 备注

此调用将根据请求正文中为每个项指定的索引来更新列表中的项。此调用不会将项插入到列表中,如果指定索引处不存在项,则调用将返回 400 Bad Request 状态。可以在一次调用中更新多个项,但所有项都必须存在于当前列表中。也就是说,要么全部更新成功,要么全部不更新。

此调用允许通过 **itemId** 而不是 **index** 来指定要更新的项。为此,只需在发送到服务的 **IndexedItems** 结构中将索引设为 "-1"。显然,在这种情况下,不能将 **itemId** 作为更新的一部分进行更改,因此它仅适用于对其他元数据字段的更改。可以使用 **provider**/**providerId** 组合而不是 **itemId** 来标识项。在内部,服务会在列表中搜索这些项并找出要更新的正确索引。如果找不到该项或这些项,则将返回 400 Bad Request 状态,并且不会更新任何项。

如果使用索引来标识项,则此调用要求在请求中包含 **If-Match:versionNumber** 标头。如果使用项 ID 来标识项(并且列表不允许重复),则 **If-Match** 标头是可选的。如果存在,**if-Match** 标头将始终被验证。标头中的 **versionNumber** 为列表的当前版本号。如果未包含(且为必填),或者与当前列表版本号不匹配,则将返回 HTTP 412 Precondition Failed 状态代码,并且响应正文将包含该列表的最新元数据(其中包含当前版本号)。这样做是为了防止来自不同客户端的更新相互覆盖。

## URI 参数

| 参数 | 类型 | 说明 |
| - | - | - |
| xuid | string | XBOX 用户 ID (XUID)。 |
| listtype | string | 列表的类型(表示其用途以及行为方式)。对于这些相关方法,始终为 "PINS"。 |
| listname | string | 列表的名称(表示对给定 listtype 的哪个列表进行操作)。对于 Pins 中的项,始终为 "XBLPins"。 |

## 授权

此调用期望在 **Authorization** 标头中传入 XSTS SAML 令牌。该 SAML 令牌中必须存在 Xuid 声明以标识调用者。此值用于确定调用者是否具有访问相关列表数据的权限。列表本身也将由 Xuid 标识,并将包含在列表的 URI 中。基于此机制,将来我们可能支持对列表的共享访问,但目前尚不支持此功能。当前,用户访问的所有列表都是其自己的,并且没有共享访问。因此,URI 中的 Xuid 必须与 SAML 声明令牌中的 Xuid 相匹配。

> **注意:**\
> 目前同时支持 XBL Auth 2.0 和 3.0 令牌。

## HTTP 状态代码

服务针对使用此方法对此资源发出的请求,返回本节中的某个状态代码。有关与 XBOX Live 服务一同使用的标准 HTTP 状态代码的完整列表,请参见[标准 HTTP 状态代码](https://devdocs.xbox.com/zh-CN/reference/live/rest/additional/httpstatuscodes)。

| 代码 | 原因短语 | 说明 |
| - | - | - |
| 200 | OK | 请求已成功完成。响应正文应包含所请求的资源(对于 GET)。POST 和 PUT 请求将收到最新的列表元数据(列表版本、计数等)。 |
| 201 | Created | 已创建新列表。这是在向列表进行初始插入时返回的。响应包含列表的最新元数据,并且位置标头包含该列表的 URI。 |
| 304 | Not Modified | 对 GET 返回。表示客户端已拥有该列表的最新版本。服务将 **If-Match** 标头中的值与列表版本进行比较。如果相等,则返回 304 且不带任何数据。 |
| 400 | Bad Request | 请求格式错误。可能是 URI 或查询字符串参数的值或类型无效。也可能是由于缺少必需的参数或数据值,或者请求指示了缺少或无效的 API 版本。请参见 **X-XBL-Contract-Version** 标头。 |
| 401 | Unauthorized | 请求需要用户身份验证。 |
| 403 | Forbidden | 不允许该用户或服务发出请求。 |
| 404 | Not Found | 调用者无权访问该资源。这表示尚未创建这样的列表。 |
| 412 | Precondition Failed | 表示列表的版本已更改,并且修改请求失败。修改请求是插入、更新或移除操作。服务会检查 **If-Match** 标头中的列表版本。如果与列表的当前版本不匹配,则该操作失败,并返回此代码以及当前列表的元数据(包括当前版本)。 |
| 500 | Internal Server Error | 由于服务器端错误,服务正在拒绝请求。 |
| 501 | Not Implemented | 调用者请求了尚未在服务器上实现的 URI。(当前仅在对未列入允许列表的列表名称发出请求时使用。) |
| 503 | Service Unavailable | 服务器拒绝请求,通常是由于负载过大。经过延迟后(请参见 **Retry-after** 标头),可以重试请求。 |

## 必需的请求标头

| 标头 | 说明 |
| - | - |
| Authorization | 包含用于对请求进行身份验证和授权的 STS 令牌。必须是来自 XSTS 服务的令牌,并且包含 XUID 作为其中一项声明。 |
| X-XBL-Contract-Version | 指定正在请求的 API 版本(正整数)。Pins 支持版本 2。如果缺少此标头或值不受支持,则服务将返回 400 - Bad request,状态描述为 "Unsupported or missing contract version header"。 |
| Content-Type | 指定请求/响应正文的内容是 json 还是 xml。支持的值为 "application/json" 和 "application/xml"。 |
| If-Match | 发出修改请求时,此标头必须包含列表的当前版本号。修改请求使用 PUT、POST 或 DELETE 谓词。如果 "If-Match" 标头中的版本与列表的当前版本不匹配,则请求将被拒绝并返回 HTTP 412 - precondition failed 代码。(可选)也可用于 GET,如果存在并且传入的版本与当前列表版本匹配,则不返回任何列表数据并返回 HTTP 304 - Not Modified 代码。 |

## 请求正文

### 请求示例

```cpp theme={null}
{"IndexedItems":
 [{  "Index": 0, 
     "Item": 
     {
       "ContentType": "Movie",
       "ItemId": "3a5095a5-eac3-4215-944d-27bc051faa47",
       "ProviderId": null,
       "Provider": null,
       "ImageUrl": "http://www.bing.com/thumb/...",
       "Title": "The Dark Knight",
       "SubTitle":null, 
       "Locale": "en-us",
       "DeviceType": "XboxOne"
     }
}]} 
      
```

## 响应正文

### 响应示例

```cpp theme={null}
{
  "ListVersion":  1,
  "ListCount":  1,
  "MaxListSize": 200,
  "AllowDuplicates": "true",
  "AccessSetting":  "OwnerOnly"
} 
         
```

## 另请参阅

##### 父主题

[/users/xuid(xuid)/lists/PINS/{listname}](https://devdocs.xbox.com/zh-CN/reference/live/rest/uri/lists/uri-usersxuidlistspinslistname)


## Related topics

- [XblUserStatisticsGetSingleUserStatisticAsync](https://devdocs.xbox.com/ja-jp/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticasync.md)
- [XblUserStatisticsGetSingleUserStatisticsAsync](https://devdocs.xbox.com/ja-jp/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticsasync.md)
