Reputation: 2280
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);
}
}
}
Upvotes: 6
Views: 17834
Reputation: 31
Makesure the controller file name and the class name is correct, it should be postfix with word"Controller" eg., UsersController.cs
Upvotes: 0
Reputation: 4250
Your route is "api/controller", not "api/entities". You need to put square brackets around "controller" for the desired effect - "api/[controller]"
.
Upvotes: 6
Reputation: 247471
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);
}
}
Upvotes: 10