繁体   English   中英

HTTP Post 方法的正确结构是什么? ASP.NET Core Web API

[英]What's the correct structure for a HTTP Post method? ASP.NET Core Web API

我正在开发一个简单的笔记 api,我正在尝试创建一个 Put 方法来更新我的笔记列表中的笔记,但是当我尝试通过 SwaggerUI 更新任何笔记时,我得到一个 404 状态代码。 我认为我在结构中遗漏了一些东西。

这是我的[HttpPut]请求:

[HttpPut("{id}")]
    public IActionResult Put([FromBody] Note requestParam)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest("Not a valid model");
        }

        using (_datacontext)
        {
            var ExistingNote = _datacontext.Note.Where(n => n.Id == requestParam.Id)
                                        .FirstOrDefault<Note>();

            if (ExistingNote != null)
            {
                ExistingNote.Title = requestParam.Title;
                ExistingNote.Description = requestParam.Description;
                ExistingNote.Completed = requestParam.Completed;

                _datacontext.SaveChanges();
            } else
            {
                return NotFound();
            }
        }

        return Ok();
    }

我的DataContext

public class DataContext : DbContext
{
    public DataContext(DbContextOptions<DataContext> option) : base(option)
    {

    }

    public DbSet<Note> Note { get; set; }
    
}

最后是我的笔记模型:

public class Note
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public bool Completed { get; set; }
}

在寻找不同的例子之后,我还没有找到一个标准的方法,所以我不知道该怎么做

我研究了 Http 主体,因为它似乎需要成为请求的一部分,但仍然得到错误代码。 它有什么问题? (post 和 get 方法都有效!)。

另外,错误代码: 状态错误 404

在控制器上使用[HttpPut("{id}")]属性时,您需要在控制器方法的签名中添加一个参数:

IActionResult Put([FromRoute] int Id, [FromBody] Note requestParam)

然后,当 Id=123 时,您可以像这样调用 API

PUT http://{base-url}/123

然后您需要使用路由中的 id 查询数据上下文(这意味着您可以将其从正文中删除)


另一方面,如果您不希望 Id 作为请求 URL 的一部分并将其保留在正文中,则需要从路由模板中删除 Id: [HttpPut] without {id}。


不用说,确保 Id 确实存在于数据上下文中。 否则,您的代码将返回,是的,404。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM