WebAPI No action was found on the controller

asp.netasp.net Web-Api

asp.net Problem Overview


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(),
               };
    }
}

asp.net Solutions


Solution 1 - asp.net

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.

Solution 2 - asp.net

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
            };


         }
        

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBotem BaoView Question on Stackoverflow
Solution 1 - asp.nettpeczekView Answer on Stackoverflow
Solution 2 - asp.netBurhanYView Answer on Stackoverflow