web-dev-qa-db-fra.com

API Web Aucune action n'a été trouvée sur le contrôleur

J'ai eu une erreur - Aucune action n'a été trouvée sur le contrôleur 'Action' qui correspond à la demande.

L'URL est http://localhost:37331/api/action/FindByModule/1.

Le routage que j'ai utilisé est

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

Manette:

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

En effet, le nom du paramètre ne correspond pas. Depuis votre route, la valeur 1 est affectée au paramètre nommé id et votre action recherche le paramètre nommé moduleId.

La première option est de changer votre itinéraire comme ceci:

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

Deuxièmement, changez votre URL comme ceci:

http://localhost:37331/api/action/FindByModule?moduleId=1

Donc, le nom du paramètre correspond.

107
tpeczek