对于 REST 终结点, Location 响应标头告知客户端在何处检索新创建的资源。 数据 API 生成器 (DAB) 返回 Location 插入 POST 。 对于 PUT 创建新行的 PATCH 更新插入,可以省略标头。
当 DAB 设置 Location 标头时
| Scenario | 状态代码 | 位置标头(当前行为) |
|---|---|---|
POST 创建新行(表) |
201 已创建 | 演示:主键路径段,例如 id/123 或 categoryid/3/pieceid/1。 |
POST 执行返回新行的存储过程 |
201 已创建 | 如果可以派生 PK,则存在;如果不能,则为空。 |
PUT upsert 更新现有行 |
200 正常 | 不存在 |
PUT upsert 插入新行(无 If-Match) |
201 已创建 | 可以省略;不依赖 Location |
PATCH upsert 更新现有行 |
200 正常 | 不存在 |
PATCH upsert 插入新行(无 If-Match) |
201 已创建 | 可以省略;不依赖 Location |
PUT
/
PATCH缺少行If-Match: * |
404 未找到 | 不存在 |
| 任何更新(已存在行) | 200 正常 | 不存在 |
行为
- 复合主键显示为有序段,例如
book_id/1/id/5001或categoryid/3/pieceid/1。 - 列名称映射(别名)使用路径中 REST 公开的字段名称。
示例:POST 创建新项
请求
POST /api/Books
Content-Type: application/json
{
"title": "New Book",
"publisher_id": 42
}
响应
HTTP/1.1 201 Created
Location: http://localhost:50246/api/Books/id/123
Content-Type: application/json
{
"id": 123,
"title": "New Book",
"publisher_id": 42
}
客户端现在可以 GET http://localhost:50246/api/Books/id/123。
示例:POST 插入复合键表
请求
POST /api/Inventory
Content-Type: application/json
{
"categoryid": 3,
"pieceid": 1,
"categoryName": "SciFi"
}
响应
HTTP/1.1 201 Created
Location: http://localhost:50246/api/Inventory/categoryid/3/pieceid/1
Content-Type: application/json
{
"categoryid": 3,
"pieceid": 1,
"categoryName": "SciFi"
}
示例:PUT 更新现有行(无位置)
请求
PUT http://localhost:50246/api/Books/id/1
Content-Type: application/json
{
"title": "Updated Title"
}
响应
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "Updated Title"
}
(无 Location 标头)。
示例:PUT 插入新行
请求
PUT http://localhost:50246/api/Books/id/500
Content-Type: application/json
{
"title": "Inserted via PUT",
"publisher_id": 7
}
响应
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 500,
"title": "Inserted via PUT",
"publisher_id": 7
}
(Location 此处可能省略标头。
示例:PUT,其中缺少 If-Match 和行
请求
PUT http://localhost:50246/api/Books/id/500
If-Match: *
Content-Type: application/json
{
"title": "Attempted Update"
}
响应
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
(无 Location 标头)。
Review
-
创建 POST:
Location主键路径存在。 -
带有更新的 PUT 或 PATCH:否
Location。 -
PUT 或 PATCH(插入):返回
201 Created;Location可以省略(不依赖于它)。 - 包含
If-Match: *时,DAB 仅在行已存在时执行更新。 如果行缺失,则请求失败且404 Not Found不执行插入,因此不会Location返回标头。