Search code examples
asp.netasp.net-web-apiurl-routingasp.net-web-api-routing

Multiple actions were found that match the request: System.Net.Http.HttpResponseMessage


My Routes here:

// Web API routes
config.MapHttpAttributeRoutes();

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

// Controllers with Actions
// To handle routes like `/api/VTRouting/route`
config.Routes.MapHttpRoute(
   name: "ControllerAndAction",
   routeTemplate: "api/{controller}/{action}/{id}",
   defaults: new { id = RouteParameter.Optional ,extension = RouteParameter.Optional }
);

And my API is:

[System.Web.Mvc.HttpPost]
[System.Web.Mvc.ActionName("san")]
public HttpResponseMessage san([FromBody]Login value)
{
   var result = db.SSI_Member_Registation.Where(c => c.InqID == value.userid && c.BirthDt == value.Password).FirstOrDefault();
   return Request.CreateResponse(HttpStatusCode.OK, result);
}

//// POST api/values
[System.Web.Mvc.HttpPost]
[System.Web.Mvc.ActionName("san1")]
public void Post([FromBody]string value)
{
}

I passed Parameter as Json and line these [![enter image description here][1]][1]

what I doing wrong?


Solution

  • Change the order of your routes:

    // Web API routes
    config.MapHttpAttributeRoutes();
    
    // Controllers with Actions
    // To handle routes like `/api/VTRouting/route`
    config.Routes.MapHttpRoute(
       name: "ControllerAndAction",
       routeTemplate: "api/{controller}/{action}/{id}",
       defaults: new { id = RouteParameter.Optional ,extension = RouteParameter.Optional }
    );
    
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    

    If you register the default one first, it will override the rest.