12
votes

ASP.NET Web API Routing ne fonctionne pas

Voici ma configuration de routage: xxx

et, voici mon contrôleur: xxx

quand j'essaie API / Produits / GetProducts / , ça marche. API / Produits / Produit? Nom = Test fonctionne également, mais API / Produits / Produit / Test Ne fonctionne pas. Qu'est-ce que je fais mal?

Mise à jour:

Voici ce que je reçois lorsque j'essaie API / Produits / Produit / Produit / Test : xxx


0 commentaires

3 Réponses :


7
votes

basé sur votre mise à jour:

Veuillez noter que webapi forts> fonctionne basé sur la réflexion Cela signifie que vos bretelles bouclées {VARS} doivent correspondre au même nom de vos méthodes. p> blockQuote>

Par conséquent, pour correspondre à ce API / Produits / Produit / Test Code> en fonction de ce modèle "API / {contrôleur} / {acte} / {id}" code > Votre méthode doit être déclarée comme ceci: p> xxx pré>

où le paramètre nom de chaîne code> a été remplacé par ID de chaîne code>. P>

Voici mon échantillon complet: p> xxx pré>

J'ai essayé d'utiliser un modèle totalement différent: P>

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


2 commentaires

@ataravati ça marche bien à ma fin. Avez-vous une erreur?


Merci pour l'explication! J'ai changé le nom du paramètre et cela a fonctionné.



16
votes

Ceci est en raison de vos paramètres de routage et de ses valeurs par défaut. Vous avez deux choix.

1) en modifiant les paramètres de route pour correspondre au paramètre produit () pour correspondre à l'URI. P> xxx pré>

2) L'autre et recommandé est Pour utiliser l'attribut correct de la signature de la méthode correcte. P>

public object Product([FromUri(Name = "id")]string name){
       // return the Product with the given name
}


3 commentaires

OK, on ​​dirait que vous devez spécifier le nom, comme celui-ci: Produit d'objet public ([Chouci (nom = "ID")] Nom de la chaîne) .


Merci pour la façon recommandée!


travaillé pour moi! Je voulais un paramètre différent de la chaîne, mais a été défini comme "ID" dans le fichier webapiconfig et votre suggestion la corrigée !! Merci beaucoup.



1
votes

Votre itinéraire est défini comme identifiant comme paramètre, votre méthode attend un paramètre de nom. Je préfère le routage de l'attribut si vous le pouvez, puis définissez / API / produits / produit / {nom} sur la méthode du produit.

http://www.asp.net/web-api/overview/web-api-Routting-and-actions/attribute-routing-in-web-api-2


0 commentaires