Search code examples
asp.netasp.net-coreasp.net-web-api-routing

ASP.NET Core Web API: Routing by method name?


I remember from ASP.NET Web API that it's sufficient to prefix Web API REST method names with HTTP commands (e.g. GetList() => HTTP GET, Delete() => HTTP DELETE) to have incoming calls appropriately routed.

I also remember that in ASP.NET Web API parameter matching takes place so that even Get(int id) and Get(int id, string name) get automatically and appropriately routed without requiring any attributes.

public class MyController
{
  public ActionResult Get(int id) => ...

  public ActionResult Get(int id, string name) => ...

  public ActionResult DeleteItem(int id) => ...
}

Isn't this all available in ASP.NET Web API Core?


Solution

  • Neither could we do action overloads nor prefix action name as Http verb.The way routing works in ASP.NET Core is different than how it did in ASP.NET Web Api.

    However, you can simply combine these actions and then branch inside, since all params are optional if you send as querystring

    [HttpGet]
    public ActionResult<string> Get(int id, string name)
    {
      if(name == null){..}
      else{...}
    }
    

    Or you need to use attribute routing to specify each api if you send in route data:

    [HttpGet("{id}")]       
    public ActionResult<string> Get(int id)
    {
        return "value";
    }
    
    
    [HttpGet("{id}/{name}")]
    public ActionResult<string> Get(int id, string name)
    {
        return name;
    }
    

    Refer to Attribute Routing,Web Api Core 2 distinguishing GETs