Search code examples
c#asp.net-mvcasp.net-web-apiasp.net-web-api-routing

issue with asp.net webApi routing with angularjs. (Multiple actions were found that match)


I have read almost everything. applied all solutions. still nothing is working.

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );


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

Web api Sorting.cs file

[ActionName("pcc")]
public IHttpActionResult Post(PccModel pcc)
{
     return Ok()
}

[ActionName("sortBy")]
public IHttpActionResult PostSortBy(SortByModel sortByModel)
{
            return Ok();
}
}

calling web api from angular controller .js file

call to sortBy...

$http({
            method: 'POST',
            url: '/api/Sorting/sortBy',
            data: sortByModel,
            headers: { 'Content-Type': 'application/json' }
        })
       .success(function () {

        }).error(function() {
        });

call to pcc

return $http.post('/api/Sorting/pcc', data);

In both call, same multiple action method error comes.


Solution

  • apply

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

    before

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

    for more info see this