I've been struggling with my routing for some time now and after a few days of trying to Google the solution without luck, I'm hoping someone may be able to shine some light on my problem.
I have the following routes in my WebApiConfig:
config.Routes.MapHttpRoute( name: "AccountStuffId", routeTemplate: "api/Account/{action}/{Id}", defaults: new { controller = "Account", Id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "AccountStuffAlias", routeTemplate: "api/Account/{action}/{Alias}", defaults: new { controller = "Account", Alias = RouteParameter.Optional } );
and the following controller methods:
[HttpGet] public Account GetAccountById(string Id) { return null; } [HttpGet] public Account GetAccountByAlias(string alias) { return null; }
If I call: /API/Account/GetAccountById/stuff
then it properly calls GetAccountById
.
But if I call /API/Account/GetAccountByAlias/stuff
then nothing happens.
Clearly order matters here because if I switch my declarations of my routes in my WebApiConfig, then /API/Account/GetAccountByAlias/stuff
properly calls GetAccountByAlias
, and /API/Account/GetAccountById/stuff
does nothing.
The two [HttpGet]
decorations are part of what I found on Google, but they don't seem to resolve the issue.
Any thoughts? Am I doing anything obviously wrong?
Edit:
When the route fails, the page displays the following:
<Error> <Message> No HTTP resource was found that matches the request URI 'http://localhost:6221/API/Account/GetAccountByAlias/stuff'. </Message> <MessageDetail> No action was found on the controller 'Account' that matches the request. </MessageDetail> </Error>