Reputation: 1001
How to make one controller with web API and non web API actions on the same controller.
When I make this, I have a 404 error for the non web API action.
I have read in differents article that it's possible to mix with ASP.NET core , but does not work.
Return 404 for:
http://localhost:5000/board/index?boardID=1
[Route("api/[controller]")]
public class BoardController : Controller
{
private IDataContext dataContext;
public BoardController(IDataContext dataContext)
{
this.dataContext = dataContext;
}
public IActionResult Index(int boardID)
{
return View();
}
[HttpGet]
public IEnumerable<Board> GetAll()
{
}
}
Or
Return 404 for http://localhost:5000/api/board/
public class BoardController : Controller
{
private IDataContext dataContext;
public BoardController(IDataContext dataContext)
{
this.dataContext = dataContext;
}
public IActionResult Index(int boardID)
{
return View();
}
[HttpGet]
public IEnumerable<Board> GetAll()
{
}
}
I think I get my second solution and use http://localhost:5000/board/getall for API action
Upvotes: 8
Views: 2185
Reputation: 58773
You could use:
[Route("api/[controller]")]
public class BoardController : Controller
{
private IDataContext dataContext;
public BoardController(IDataContext dataContext)
{
this.dataContext = dataContext;
}
[Route("/[controller]/[action]")]
public IActionResult Index(int boardID)
{
return View();
}
[HttpGet]
public IEnumerable<Board> GetAll()
{
}
}
Putting a slash in front of the route overrides the controller-level route attribute.
Upvotes: 10