Come aggiungere l'API Web a un progetto ASP.NET MVC (5) Web Application esistente?


146

Supponendo di aver dimenticato di selezionare la casella di controllo API Web (aggiungerla al progetto) quando si crea un nuovo progetto MVC (5), cosa è necessario aggiungere API Web e farlo funzionare?

Esistono molte domande sulla migrazione, ma nessuna sembra avere i passaggi completi e aggiornati per l'aggiunta dell'API Web a un progetto MVC 5 e sembra essere cambiata rispetto ad alcune delle vecchie risposte.

Aggiungi API Web a MVC 4

Aggiunta di GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

Risposte:


253

Aggiorna il progetto MVC

Utilizzare Nuget per ottenere l'API Web più recente.

Progetto - Clic destro - Gestisci pacchetti Nuget - Cerca API Web (API Web ASP.NET Microsoft ...) e installalo nel tuo progetto MVC.

Quindi devi ancora far funzionare il routing dell'API Web . Da Configurare ASP.NET Web API di Microsoft 2

Aggiungi WebApiConfig.cs nella cartella 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();
        }
    }
}

Se hai un progetto MVC avrà Global.asax.cs , aggiungi i nuovi percorsi. L'ordine delle rotte Global.asax.cs è fondamentale. Nota che ci sono esempi obsoleti che usano WebApiConfig.Register

Aggiungi questa linea a 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);
}

Guida di WebAPI

Per ottenere le ( molto ) utili pagine di aiuto di WebAPI , installare WebAPI.HelpPage. Vedi http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 minuti in) per quello che fa. Sembra molto utile!

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

Per verificare che WebAPI funzioni:

Nella cartella dei controller -> Aggiungi nuovo elemento -> Classe controller 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";
    }
    //...
}

Ora puoi testare in IE / FF / Chrome come al solito, o nelle console JavaScript per i test non get.

(Con solo il controller nell'URL, chiamerà l'azione GET () nel nuovo controller API Web, verrà automaticamente mappato su metodi / azioni in base al REST, ad esempio PUT / POST / GET / DELETE. Non è necessario chiamare li per azione come in MVC) L'URL direttamente:

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

In alternativa, utilizzare jQuery per eseguire una query sul controller. Esegui il progetto, apri la console (F12 in IE) e prova a eseguire una query Ajax. (Controlla il tuo PORT & CONTROLLERNAME)

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

Nota a margine: ci sono alcuni pro / contro da considerare quando si combinano MVC e API Web in un progetto

Verifica della Guida di WebAPI: http://localhost:PORT/help


@Iko ho fatto tutto quello che hai scritto sul codice ma ho un errore quando lo eseguo. mi dà un errore
ninjaXnado il

1
Prova a cercare il messaggio di errore. Questi passaggi erano essenzialmente ciò che era richiesto nel caso generale.
lko,

13
"L'ordine delle rotte Global.asax.cs è fondamentale" +1
Jim Aho,

Non riesco a capire come testare se ho aggiunto correttamente l'API Web? Cosa devo scrivere esattamente sul browser? Ho scritto http://localhost:12345/api/Get/5ma ho ricevuto un errore.
Jason,

3
Stavo usando il "vecchio modo" chiamando WebApiConfig.Register (GlobalConfiguration.configuration); e non ho più potuto eseguire il debug. Avrei iniziato il debug e non avrebbe mai raggiunto le funzioni del mio controller. Sono passato al "nuovo modo" GlobalConfiguration.Configure (WebApiConfig.Register); e il problema è stato risolto.
D. Kermott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.