我建立了一个非常简单的ASP.NET Core 2.1 Web API项目,并创建了以下简单的控制器,该控制器使用EF Core来获取实体。
问题是,当尝试使用邮递员访问GetEntities方法时,响应为404错误。我在以下网址上使用了HTTP GET方法。
https://localhost:44311/api/entities
响应正文包含消息<pre>Cannot GET /api/entities</pre>
。
为什么邮递员在此路线上收到404错误?
EntitiesController.cs
namespace MyProject.Controllers
{
[Route("api/controller")]
public class EntitiesController : Controller
{
private readonly ApplicationDbContext dbContext;
public EntitiesController(ApplicationDbContext _dbContext)
{
this.dbContext = _dbContext;
}
[HttpGet]
public IActionResult GetEntities()
{
var result = dbContext.Entities.ToListAsync();
return Ok(result);
}
}
}
答案 0 :(得分:7)
为什么邮递员在此路线上收到404错误?
问题是控制器上的路由模板中缺少控制器令牌[controller]
,导致路由被硬编码为api/controller
。
这意味着在请求 api / entities 时,它在技术上不存在,因此在请求时 404未找到。
更新控制器上的路由模板。
[Route("api/[controller]")]
public class EntitiesController : Controller {
private readonly ApplicationDbContext dbContext;
public EntitiesController(ApplicationDbContext _dbContext) {
this.dbContext = _dbContext;
}
//GET api/entities
[HttpGet]
public async Task<IActionResult> GetEntities() {
var result = await dbContext.Entities.ToListAsync();
return Ok(result);
}
}
答案 1 :(得分:2)
您的路线是“ api / controller”,请注意“ api / entities”。您需要在“控制器”周围放置方括号才能获得预期的效果-"api/[controller]"
。
答案 2 :(得分:0)
确保控制器文件名和类名正确,应使用单词“ Controller”作为后缀,例如UsersController.cs