Here is my code:
public class SecurityController : ApiController
{
//GET api/Security/Current
public HttpResponseMessage GetCurrent(){
}
//POST api/Security/Login
public HttpResponseMessage PostLogin(LoginModel model){
}
}
public class OrdersController : ApiController
{
[ActionName("Default")] //GET api/Orders
public HttpResponseMessage Get(){
}
[ActionName("Default")] //GET api/Orders/2
public HttpResponseMessage Get(long id){
}
[ActionName("Default")] //POST api/Orders/
public HttpResponseMessage Post(Order order){
}
[ActionName("Default")] //DELETE api/Orders/2
public HttpResponseMessage Delete(long id){
}
[HttpPost] //POST api/Orders/2/PerformAction
public HttpResponseMessage PerformAction(long id, ActionMsg action){
}
}
//Route definitions
config.Routes.MapHttpRoute("ActionApi", "api/{controller}/{action}");
config.Routes.MapHttpRoute("WithActionApi", "api/{controller}/{id}/{action}");
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional, action = "Default" }, new { id = @"\d+" });
My routing is not working.
No HTTP resource was found that matches the request URI
What is the correct route definition for my API controller? Thanks!
Change your SecurityController to:
public class SecurityController : ApiController
{
//GET api/Security/Current
[HttpGet]
[ActionName("current")]
public HttpResponseMessage GetCurrent(){
}
//POST api/Security/Login
[HttpPost]
[ActionName("login")]
public HttpResponseMessage PostLogin(LoginModel model){
}
}
And then change your routing to:
config.Routes.MapHttpRoute("ActionApi",
"api/{controller}/{action}",
null,
new { action = @"[a-zA-Z]+" });
config.Routes.MapHttpRoute("WithActionApi",
"api/{controller}/{id}/{action}");
config.Routes.MapHttpRoute("DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional, action = "Default" },
new { id = @"\d*" });
Note the regex "\d*" is required in the last route rather than "\d+".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With