Paramètres Web.API MapHttpRoute
Je vais avoir des problèmes avec mon site Web.API de routage. J'ai le texte suivant deux voies:
config.Routes.MapHttpRoute(
name: "MethodOne",
routeTemplate: "api/{controller}/{action}/{id}/{type}",
defaults: new { id = RouteParameter.Optional, type = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "MethodTwo",
routeTemplate: "api/{controller}/{action}/{directory}/{report}",
defaults: new { directory = RouteParameter.Optional, report = RouteParameter.Optional }
);
Et dans mon contrôleur de ces deux méthodes:
[HttpGet]
[ActionName("methodone")]
public string MethodOne(string id, string type)
{
return string.Empty;
}
[HttpGet]
[ActionName("methodtwo")]
public string MethodTwo(string directory, string report)
{
return string.Empty;
}
Ces deux apparemment ne peut pas vivre côte à côte. Si je commente la MethodOne route dans WebApiConfig, le MethodTwo itinéraire fonctionne. Commentant MethodTwo itinéraire permet MethodOne pour travailler. En laissant les deux sans commentaire, MethodOne fonctionne, mais pas MethodTwo.
J'espérais utiliser un itinéraire pour les deux de ces choses, alors il semble qu'ils devraient avoir les mêmes noms de paramètres. Qui écrit les méthodes génériques de noms de paramètre? Mauvais. Je ne veux vraiment pas mes méthodes pour avoir les mêmes noms de paramètres (comme p1, p2, p3), j'ai donc pensé que je pourrais créer un itinéraire pour la nouvelle méthode. Mais même cela ne semble pas fonctionner.
Je l'ai vraiment manquer le WebGet(UriTemplate="")
de WCF rest.
J'ai un contrôleur qui a de nombreuses méthodes, certains avec 1, 2, 3 ou même plus de paramètres. Je ne peux pas croire que je ne peux utiliser significative des noms de paramètre avec la MapHttpRoute approche.
Je pourrais commenter ce genre de choses complètement et utiliser WebGet()
... mais avant que je suis arrivé, j'ai voulu voir si je suis absent quelque chose.
source d'informationauteur Nicros
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle vous voyez ce problème, c'est parce que votre première route à la fois les demandes. L'identifiant et le type de jeton dans l'URL correspond à la fois les demandes, car lorsque l'itinéraire est en cours d'exécution, il va essayer d'analyser l'URL et correspondre à chaque segment à l'encontre de votre URL.
Votre premier itinéraire sera heureux de correspondre à la fois aux demandes de la façon suivante.
Pour contourner ce problème, vous devez utiliser la route comme
Même si vous utilisez WebGet, vous pourriez avoir besoin de faire quelque chose de similaire à disambiguous ces deux méthodes, je crois.
Vous pouvez choisir de passer les paramètres dans la chaîne de requête comme /MethodTwo?annuaire=a&rapport=b, mais si vous préférez qu'ils se présentent dans le chemin, il se présente comme un bon candidat pour l'attribut de routage. Filip a un excellent post sur le sujet ici:
http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/
De http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection
L'ajout de cette contrainte de "MethodOne" (api/{controller}/{action}/{id}/{type}) signifie que le nombre des seuls matchs de, si {id} est un nombre, sinon il pourrait correspondre à "MethodTwo" ("api/{controller}/{action}/{répertoire}/{rapport}").