I got an error - No action was found on the controller 'Action' that matches the request.
The url is http://localhost:37331/api/action/FindByModule/1
.
The routing I used is
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
Controller:
public class ActionController : ApiController { private IActionRepository repository = null; [HttpGet] [ActionName("All")] public IEnumerable<JsonAction> All() { return from action in this.repository.Get() select new JsonAction { ID = action.ID, Text = action.Text.Trim(), Description = action.Description.Trim(), }; } [HttpGet] [ActionName("FindByModule")] public IEnumerable<JsonAction> FindByModule(Int64 moduleId) { return from action in this.repository.FindByModule(moduleId) select new JsonAction { ID = action.ID, Text = action.Text.Trim(), Description = action.Description.Trim(), }; } }
You just need to make sure that you get your URLs right, so WebApi calls your MVC controller via it's properly qualified route. To test this, write a simple MVC action which returns some Json data and call it in the browser. If you manage to craft the URL correctly you will see the data displayed in the browser.
This article explains actions in the ASP.NET Web API. Action methods returns the response of the user input and it also returns an action result. ActionResult. ActionResult is a class, all the action methods depend on the ActionResult class, so it is called the base of the action method.
This is because there is a parameter name mismatch. From your route the value 1 is assigned to parameter named id
and your action is looking for parameter named moduleId
.
First option is to change your route like this:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{moduleId}", defaults: new { moduleId = RouteParameter.Optional } );
Second is to change your URL like this:
http://localhost:37331/api/action/FindByModule?moduleId=1
So the parameter name match.
My api had too many parameters and I was getting an error. I solved the problem with Route.
[Route("addressverification/{id}/{no}/{day}/{month}/{year}")] public AdressVerificationResult Get(long? id, long? no ,long? day, long? month, long? year) { return new AdressVerificationResult { Aciklama = "19........4 kimlik numaralı kişinin 18.......1 adres numarasında 'YerlesimYeri' adres tipi için geçerli bir yurtiçi adres beyanı mevcuttur.", DurumKod = true }; }
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