在ASP.NET Core Web API中,使用Entity Framework Core默认的脚手架生成的控制器,PUT和POST方法的混淆是一个常见的问题,因为它们在默认情况下具有相同的路由模板。解决此问题的一种方法是使用自定义的路由模板来区分PUT和POST方法。
以下是一个示例解决方案:
首先,在生成的控制器类上添加[Route("api/[controller]")]
属性,以指定控制器的路由模板。
[Route("api/[controller]")]
[ApiController]
public class YourController : ControllerBase
{
private readonly YourDbContext _context;
public YourController(YourDbContext context)
{
_context = context;
}
// GET: api/YourController
[HttpGet]
public async Task>> GetYourEntities()
{
// your code here
}
// GET: api/YourController/5
[HttpGet("{id}")]
public async Task> GetYourEntity(int id)
{
// your code here
}
// PUT: api/YourController/5
[HttpPut("{id}")]
public async Task PutYourEntity(int id, YourEntity yourEntity)
{
// your code here
}
// POST: api/YourController
[HttpPost]
public async Task> PostYourEntity(YourEntity yourEntity)
{
// your code here
}
// DELETE: api/YourController/5
[HttpDelete("{id}")]
public async Task DeleteYourEntity(int id)
{
// your code here
}
}
接下来,在PUT方法上添加[HttpPut("{id}")]
属性,以指定PUT方法的路由模板。这将使PUT方法的路由模板与控制器的路由模板不同。
// PUT: api/YourController/5
[HttpPut("{id}")]
public async Task PutYourEntity(int id, YourEntity yourEntity)
{
// your code here
}
这样,PUT请求将被路由到api/YourController/{id}
,而POST请求将被路由到api/YourController
。
请注意,PUT方法和POST方法的参数类型(YourEntity yourEntity
)应该是相同的实体类型。
希望这个示例能帮助你解决ASP.NET Core Web API与Entity Framework Core默认的脚手架控制器混淆PUT和POST方法的问题。
上一篇:Asp.Net Core Web Api与Angular模板未处理的异常。System.InvalidOperationException:类型''不受支持。
下一篇:ASP.NET Core Web API与Identity - React SPA前端 - 身份验证cookie未保存到浏览器?