![](/img/trans.png)
[英]Why does an http get method accepts http post request in asp.net 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 方法都有效!)。
在控制器上使用[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.