kwi*_*iri 8 rest put http-verbs asp.net-web-api
对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?
例如:
public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
Run Code Online (Sandbox Code Playgroud)
ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。
相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:
public void Put([FromBody]SomeDto someDto)
Run Code Online (Sandbox Code Playgroud)
考虑默认的 ASP.NET Web API 路由模板:
api/{controller}/{id}
Run Code Online (Sandbox Code Playgroud)
...以及与该模板匹配的路线:
api/persons/42
Run Code Online (Sandbox Code Playgroud)
然后,你的第一个方法签名:
api/{controller}/{id}
Run Code Online (Sandbox Code Playgroud)
...将确保您的 DTO 标识符(例如42)出现在 PUT 请求的 URI 中,这被认为是良好实践,如此处和此处所述。
在您的Put操作方法中,您可以考虑检查 DTO 中指定的标识符是否与路由中指定的标识符匹配。如果它们不同,则返回 HTTP 状态代码400 Bad Request:
api/persons/42
Run Code Online (Sandbox Code Playgroud)