I have set up a very simple ASP.NET Core 2.1 Web API project, and have created to following simple controller that fetches entites using EF Core.
The problem is that when trying to access the GetEntities method using Postman, the response is a 404 error. I used an HTTP GET method on the following URL.
https://localhost:44311/api/entities
The response body contains the message <pre>Cannot GET /api/entities</pre>
.
Why is Postman receiving a 404 error for this route?
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);
}
}
}
Why is Postman receiving a 404 error for this route?
The issue was the controller token [controller]
was missing from the route template on the controller, causing the route to be hard-coded to api/controller
.
That meant that when requesting api/entities it technically did not exist and thus 404 Not Found when requested.
Update the route template on the controller.
[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);
}
}
Reference Routing to controller actions in ASP.NET Core : Token replacement in route templates ([controller], [action], [area])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With