ArDumez
ArDumez

Reputation: 1001

Mix web api action and non api action same controller asp.net core

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:

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

Answers (1)

juunas
juunas

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

Related Questions