【问题标题】:Best practice C# REST API最佳实践 C# REST API
【发布时间】:2020-05-29 13:24:49
【问题描述】:

我们正在开发一个 REST API,并且我们允许所有四个标准动词。在 POST/PUT 的情况下 最佳实践 c# rest api 有什么更好的。

这是我的模特

public class UserModel
{
    public Int64 ID { get; set; }
    [Display(Name ="First Name")]
    public string FirstName { get; set; }
    [Display(Name="Last Name")]
    public string LastName { get; set; }
    public string Address { get; set; }
    [Display(Name="User Name")]
    public string UserName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    [Display(Name ="Added Date")]
    public DateTime AddedDate { get; set; }
}

示例 1

[HttpPost]
public ActionResult CreateEditUser(UserModel model)
{
    if (model.ID == 0)
    {
        User userEntity = new User
        {
           //....
         }
   }
}

示例 2

[HttpPost]
public ActionResult CreateEditUser(int id,UserModel model)
{
    if (id == 0)
    {
        User userEntity = new User
        {
            //.....
         }
     }
 }

示例 1 和示例 2 哪个更好

【问题讨论】:

  • 你都试过了吗?我认为示例 2 在默认情况下不会起作用,因为您有两个参数。
  • 我会使用 HTTPPUT 示例 2,更容易查找目标并进行更新...如果示例 2 应该这样做的话。
  • 最佳实践将是您的第一个示例。在模型中,您可以定义 Model validations 并根据您的标准检测模型是否有效。如果有或没有,您可以根据这些操作显示适当的消息。

标签: c# .net rest asp.net-core-webapi


【解决方案1】:

根据 REST 指南 (https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md)

PUT:替换对象,或创建命名对象(如果适用)

POST:根据提供的数据创建新对象,或提交命令

PATCH:对对象应用部分更新

在您的情况下,最好将端点拆分为 POSTPUT

[HttpPost]
public ActionResult CreateUser(UserModel model) 
{
    userService.Create(model);
    return...
}

[HttpPut]
public ActionResult EditUser(UserModel model)
{
    userService.Update(model);
    return...
}

【讨论】:

  • 所以我不需要将 int id 放入方法中,因为我的模型中有 Id ??
  • 对于创建,您不需要 id,因为 id 通常会在其他地方生成以确保它是唯一的。对于编辑/更新,您的模型将包含所需的 id,当您执行读取/获取操作时将返回给您。
  • 好的,但同时我已经有模型里面的 id 出于这个原因我告诉我当我有模型时我不需要输入法中的 id int
猜你喜欢
  • 2013-10-23
  • 1970-01-01
  • 2018-04-27
  • 2018-05-25
  • 2020-04-23
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
相关资源
最近更新 更多