web-dev-qa-db-fra.com

Routage Web API 2 - Attribut Route

La question concerne la définition de routes personnalisées avec l'attribut Route.

Je sais que dans la classe WebApiConfig, vous définissez toujours la route par défaut,

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
  new { id = RouteParameter.Optional });

Ce que je ne peux pas faire, c'est quand je veux passer un autre paramètre. Je sais que je peux le faire ( le code ci-dessous est défini sous la route par défaut répertoriée ci-dessus ):

    //configuration.Routes.MapHttpRoute(
    //    name: "GetBrandImagePaths",
    //    routeTemplate: "api/{controller}/{id}/{type}");

Mais je préfère, au lieu de définir toutes ces routes dans le fichier WebApiConfig, utiliser un routage personnalisé. Cependant, si je n'ai pas le code commenté ci-dessus dans le fichier, j'obtiens un 404. Cela me porte à croire que le Route personnalisé n'est même pas examiné.

public class HelperApiController : ApiController
{
    [HttpGet]
    [Route("api/helperapi/{id}/{type}")]
    public string GetBrandImages(int id, string type)
    {
        .....
    }
}

Comment puis-je l'avoir pour pouvoir utiliser les routes définies dans le fichier WebApiConfig ET définir des routes personnalisées dans les contrôleurs API individuels.

Notez que ce projet est également un projet MVC (pas seulement WebApi). Y a-t-il quelque chose qui me manque, que je fais mal, etc.? Je sais qu'il existe de nombreux articles définissant comment passer plusieurs paramètres, mais je pense que ma question est un peu plus précise sur la raison pour laquelle l'un fonctionne et non l'autre.

9
Rob Scott

Vous devez appeler config.MapHttpAttributeRoutes().

Cela analysera toutes les classes Controller et dérivera les routes à partir des attributs.

Je ne voudrais pas mélanger cela avec le routage standard.

15
toadflakz

Routage d'attributs dans l'API Web ASP.NET 2

Activation du routage d'attributs

Pour activer le routage d'attribut, appelez MapHttpAttributeRoutes pendant la configuration. Cette méthode d'extension est définie dans la classe System.Web.Http.HttpConfigurationExtensions .

using System.Web.Http;

namespace WebApplication
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();

            // Other Web API configuration not shown.
        }
    }
}

Le routage d'attributs peut être combiné avec un routage basé sur des conventions. Pour définir des itinéraires basés sur des conventions, appelez la méthode MapHttpRoute.

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 }
        );
    }
}
7
Nkosi