Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC 4.5 Web API Routing not working?

The 1st route works.

e.g. api/Shelves/SpaceTypes/1

The 2nd route doesn't work. I get multiple actions error.

e.g api/Shelves/1

Q) Why?

These are my routes:

config.Routes.MapHttpRoute(
    "DefaultApiWithAction",
    "api/{controller}/{action}/{id}"
);

config.Routes.MapHttpRoute(
    "DefaultApiWithId",
    "api/{controller}/{id}",
    null,
    new { id = @"\d+" }
);

This is my controller:

public HttpResponseMessage Get(int id)
{
     ...
}

[ActionName("SpaceTypes")]
public HttpResponseMessage GetSpaceTypes(int id)
{
     ...
}
like image 530
Dave Avatar asked Dec 04 '22 10:12

Dave


1 Answers

For MVC 4.5 this is the only thing that works

There is currently a bug about this.

In order to get your routing to work so the following work

api/Shelves/ //Get All Shelves
api/SpaceTypes/1 //Get Shelf of id 1
api/Shelves/1/SpaceTypes/  //Get all space types for shelf 1

you need to do the following.

Change your routing over to. (Note the default action..)

config.Routes.MapHttpRoute(
    name : "DefaultAPi",
    routeTemplate : "api/{controller}/{id}/{action}",
    defaults: new {id= RouteParameter.Optional, 
    action = "DefaultAction"}
);

In your controller change the base methods over to

[ActionName("DefaultAction")]
public string Get()
{
}

[ActionName("DefaultAction")]
public string Get(int id)
{
}

[ActionName("SpaceTypes")]
public string GetSpaceTypes(int id)
{
}

Now everything should work as expected..

Thanks to Kip Streithorst full this, for a full explanation

like image 94
TheAlbear Avatar answered Jan 02 '23 12:01

TheAlbear