1
votes

I am having a problem when trying to have two different GET methods, one for retrieving a number of resources while one is for retrieving a specific resource.

Startup.cs

  config.Routes.MapHttpRoute("DefaultAPI",
            "api/{controller}/{action}",
            new { id = RouteParameter.Optional });

Controller.cs

[RoutePrefix("api/Files")]
public class FileController : ApiController
{
    //   /api/Files/
    [Authorize]
    [Route("")]
    public IHttpActionResult GetAll()
    {

    }

    //   /api/Files/Id/
    [Authorize]
    [Route("Id")]
    public async Task<HttpResponseMessage> Get([FromBody] string id)
    {
    }

    //   /api/Files/Upload
    [Authorize]
    [HttpPost]
    [Route("Upload")]
    public async Task<HttpResponseMessage> Post()
    {
    }

    //   /api/Files/Delete
    [Authorize]
    [Route("Delete")]
    public IHttpActionResult Delete([FromBody] string id)
    {
    }

This is new to me and I know I am also making a mistake with using both IHttpActionResult as well as HttpResponseMessage but I figured I would change that later on after I figure out the routing.

Error:

When Startup.cs has

"api/{controller}/{action}"

, it returns a 404 Not found, when it is "api/{controller}/{id}", the error is:

Multiple actions were found that match the request: \r\nGetAll

1

1 Answers

2
votes

If you are using attribute-based routing, you need to add the following code before you declare any WebAPI routes in Startup.cs:

config.MapHttpAttributeRoutes();