Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

  • http://localhost:5000/board/index/1
  • 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

like image 706
ArDumez Avatar asked Dec 20 '16 08:12

ArDumez


People also ask

What is the difference between MVC controller and Web API controller?

The main difference is: Web API is a service for any client, any devices, and MVC Controller only serve its client. The same because it is MVC platform.

Can we use MVC controller as API controller?

Web API controller implements actions that handle GET, POST, PUT and DELETE verbs. Web API framework automatically maps the incoming request to an action based on the incoming requests' HTTP verb. MVC controller usually handles GET and POST requests but you can handle other verbs also.

What is difference between ActionResult and IActionResult?

The IActionResult return type is appropriate when multiple ActionResult return types are possible in an action. The ActionResult types represent various HTTP status codes. Any non-abstract class deriving from ActionResult qualifies as a valid return type.


1 Answers

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.

like image 110
juunas Avatar answered Sep 23 '22 09:09

juunas