Vous utilisez Attribute Routing in ASP.NET Web API 2. Assurez-vous de configurer votre API Web pour utiliser le routage d'attribut avec MapHttpAttributeRoutes
.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Suivant assurez-vous que vous avez défini votre contrôleur correctement
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("api/values/{p1}/{p2}")]
public HttpResponseMessage Get (string p1, string p2) {
...
}
}
Vous pouvez même utiliser RoutePrefix
[RoutePrefix("api/values")]
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("{p1}/{p2}")]
public HttpResponseMessage Get (string p1, string p2) {
...
}
}
Aussi, si comme dans votre exemple, vous voulez que le premier paramètre à un entier. alors vous pouvez utiliser une contrainte de route et une méthode de mise à jour.
[RoutePrefix("api/values")]
public class ValuesController : ApiController {
//GET api/values/100/some-string-here
[HttpGet]
[Route("{p1:int}/{p2}")]
public HttpResponseMessage Get (int p1, string p2) {
...
}
}
MISE À JOUR:
Création d'un test d'intégration du contrôleur de valeurs et a été en mesure de confirmer que l'action a été appelé
[TestMethod]
public async Task HttpClient_Should_Get_OKStatus_From_Action_With_Multiple_Parameters() {
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
using (var server = new HttpServer(config)) {
var client = new HttpClient(server);
string url = "http://localhost/api/values/100/some+string+here";
using (var response = await client.GetAsync(url)) {
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
}
Il pourrait avoir quelque chose à voir avec 'values'. Essayez de remplacer ceci par le nom de contrôleur approprié, comme 'Home' (si votre ApiController s'appelait' HomeController'). – Igor
peut être utile de vérifier cela http://stackoverflow.com/questions/12835074/mvc4-web-api-rest-interface-with-multiple-parameters – terbubbs
Je ne peux pas reproduire votre problème. J'ai essayé d'utiliser la dernière version de Web-API 2.2. J'ai utilisé divers noms de contrôleurs d'API Web et votre même URI et méthode que vous avez affichés, il est frappé à chaque fois par les valeurs. Choses à vérifier. Assurez-vous que la classe que vous avez définie hérite de 'ApiController' (et non de Controller). Publiez la configuration de routage par défaut dans le fichier webapiconfig.cs. Assurez-vous que votre WebApiConfig.cs est en cours d'initialisation au démarrage. – Igor