web-dev-qa-db-fra.com

Comment ajouter une API Web à un projet d'application Web ASP.NET MVC (5) existant?

En supposant que vous ayez oublié de cocher la case API Web (ajoutez-le au projet) lors de la création d'un nouveau projet MVC (5), que devez-vous ajouter à l'API Web et le faire fonctionner?

Il existe de nombreuses questions sur la migration, mais aucune ne semblait avoir les étapes complètes et à jour pour ajouter l'API Web à un projet MVC 5 et elle semble avoir changé depuis réponses anciennes.

Ajouter une API Web à MVC 4

Ajout de GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

140
lko

Mettre à jour le projet MVC

Utilisez Nuget pour obtenir la dernière API Web.

Projet - Cliquez avec le bouton droit de la souris sur - Gestion des packages de pépites - Recherchez l'API Web (API Web Microsoft ASP.NET ...) et installez-la sur votre projet MVC.

Ensuite, vous devez toujours obtenir le routage API Web pour fonctionner. De Configuration de l'API Web ASP.NET 2 par Microsoft

Ajoutez WebApiConfig.cs dans le dossier App_Start/

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

Si vous avez un projet MVC, il aura Global.asax.cs , ajoutez les nouveaux itinéraires. L'ordre des routes Global.asax.cs est critique. Notez qu'il existe des exemples obsolètes qui utilisent WebApiConfig.Register

Ajoutez cette ligne à Global.asax.cs: GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Aide WebAPI

Pour obtenir le ( très ) pages d'aide de WebAPI utiles , installez WebAPI.HelpPage. Voir http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 minutes) pour ce qu'il fait. Cela semble très utile!

Console Nuget: Install-Package Microsoft.AspNet.WebApi.HelpPage

Pour vérifier que WebAPI fonctionne:

Dans le dossier des contrôleurs -> Ajouter un nouvel élément -> Classe de contrôleur API Web.

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

Vous pouvez maintenant tester dans IE/FF/Chrome comme d'habitude, ou dans les consoles JavaScript pour les tests sans récupération.

(Avec seulement le contrôleur dans l'URL, il appellera l'action GET () dans le nouveau contrôleur API Web, il est automatiquement mappé aux méthodes/actions en fonction du REST, par exemple, PUT/POST/GET/DELETE. Vous pas besoin de les appeler par action comme dans MVC) L'URL directement:

http://localhost:PORT/api/CONTROLLERNAME/

Vous pouvez également utiliser jQuery pour interroger le contrôleur. Exécutez le projet, ouvrez la console (F12 dans IE) et essayez d’exécuter une requête Ajax. (Vérifiez votre PORT & CONTROLLERNAME)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

Remarque: il existe certains avantages/inconvénients à prendre en compte lors de la combinaison de MVC et de l'API Web dans un projet

Vérification de l'aide WebAPI: http://localhost:PORT/help

243
lko