J'ai les 2 routes d'installation suivantes et elles fonctionnent correctement lorsqu'une demande valide est envoyée. Je voulais tester une mauvaise demande pour m'assurer que la réponse était correcte. J'essaie d'appeler l'action suivante dans mon contrôleur.Autoriser l'ID de chaîne avec l'itinéraire ASP.NET MVC
public HttpResponseMessage Get(string id)
{
//output the id again
}
Si j'appelle localhost:80/users/123
, j'obtenir une réponse valide et il sera sortie 123
. Lorsque j'essaie d'utiliser un ID
non valide, par exemple, celui qui contient des lettres échoue avec l'erreur suivante.
{ « message »: « Aucune ressource HTTP a été trouvé qui correspond à la demande URI « http://localhost:80/users/d1g ». », « MessageDetail »: "Aucune action n'a été trouvé sur le contrôleur « utilisateurs » qui correspond au nom ' d1g '. "}
Je peux voir ce qui ne va pas. Cette requête doit correspondre à la première route, mais elle correspond à la seconde route. J'ai 2 méthodes appelées Get
. On accepte un ID
et l'autre ne nécessite pas de ID
. Celui qui ne nécessite pas de ID
renvoie la liste de tous les enregistrements. J'ai eu beaucoup de problèmes avec cela et la route ci-dessus est la façon dont j'ai résolu le problème.
Il ne devrait pas correspondre à la première route. Cette route a une contrainte qui n'autorise que les nombres 'new {id = @" \ d + "}' pour le paramètre id. Et c'est pour qu'il ne soit pas en conflit avec le deuxième mappage d'itinéraire – Nkosi
Je pense que pour votre premier GET, vous avez spécifié un masque ici: 'new {id = @" \ d + "}', essayez de le supprimer. Mais aussi je pense que vous ne devriez avoir qu'une seule méthode avec une décision simple: si 'ID' est passé, alors retourner un objet, sinon retourner une liste. Mais je prendrais un autre chemin. –
Si je supprime la contrainte, j'obtiens une erreur "Plusieurs actions trouvées correspondent à la requête: \ r \ nSystem.Net.Http.HttpResponseMessage Get()". Cela a du sens car j'ai 2 méthodes get. Une qui prend un identifiant et une autre qui n'en prend aucune pour retourner une liste d'enregistrements –