Wie füge ich eine Web-API zu einem vorhandenen ASP.NET MVC (5) Webanwendungsprojekt hinzu?

146

Angenommen, Sie haben vergessen, das Kontrollkästchen Web-API zu aktivieren (zum Projekt hinzuzufügen), wenn Sie ein neues MVC (5) -Projekt erstellen. Was müssen Sie tun, um die Web-API hinzuzufügen und zum Laufen zu bringen?

Es gibt eine Reihe von Migrationsfragen, aber keine schien die vollständigen und aktuellen Schritte zum Hinzufügen einer Web-API zu einem MVC 5-Projekt zu haben, und es scheint sich von einigen der alten Antworten geändert zu haben.

Hinzufügen einer Web-API zu MVC 4

Hinzufügen von GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

lko
quelle

Antworten:

253

Aktualisieren Sie das MVC-Projekt

Verwenden Sie Nuget , um die neueste Web-API abzurufen .

Projekt - Rechtsklick - Nuget-Pakete verwalten - Nach Web-API suchen (Microsoft ASP.NET-Web-API ...) und in Ihrem MVC-Projekt installieren.

Dann muss das Web-API-Routing noch funktionieren. Von Microsoft Konfigurieren der ASP.NET-Web-API 2

Fügen Sie WebApiConfig.cs zum Ordner App_Start / hinzu

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

Wenn Sie ein MVC-Projekt mit Global.asax.cs haben , fügen Sie die neuen Routen hinzu. Die Reihenfolge der Global.asax.cs-Routen ist kritisch. Beachten Sie, dass es veraltete Beispiele gibt, die verwenden WebApiConfig.Register

Fügen Sie diese Zeile zu Global.asax.cs hinzu: 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);
}

WebAPI-Hilfe

Installieren Sie WebAPI.HelpPage, um die ( sehr ) hilfreichen WebAPI-Hilfeseiten zu erhalten. Weitere Informationen finden Sie unter http://channel9.msdn.com/Events/Build/2014/3-644 (ca. 42 Minuten). Es sieht sehr hilfreich aus!

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

So überprüfen Sie, ob WebAPI funktioniert:

Zum Controller-Ordner -> Neues Element hinzufügen -> Web-API-Controller-Klasse.

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";
    }
    //...
}

Jetzt können Sie wie gewohnt in IE / FF / Chrome oder in den JavaScript-Konsolen testen, um nicht zu testen.

(Mit nur dem Controller in der URL wird die Aktion GET () im neuen Web-API-Controller aufgerufen. Abhängig vom REST wird sie automatisch Methoden / Aktionen zugeordnet, z. B. PUT / POST / GET / DELETE. Sie müssen nicht aufrufen sie durch Aktion wie in MVC) Die URL direkt:

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

Verwenden Sie alternativ jQuery, um den Controller abzufragen. Führen Sie das Projekt aus, öffnen Sie die Konsole (F12 im IE) und versuchen Sie, eine Ajax-Abfrage auszuführen. (Überprüfen Sie Ihren PORT & CONTROLLERNAME)

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

Randnotiz: Beim Kombinieren von MVC und Web-API in einem Projekt sind einige Vor- und Nachteile zu beachten

Überprüfung der WebAPI-Hilfe: http://localhost:PORT/help

lko
quelle
@Iko Ich habe alles getan, was Sie auf den Code geschrieben haben, aber ich habe einen Fehler, wenn ich es ausführen. es gibt mir einen Fehler
ninjaXnado
1
Versuchen Sie, nach der Fehlermeldung zu suchen. Diese Schritte waren im Wesentlichen das, was im allgemeinen Fall erforderlich war.
lko
13
"Die Reihenfolge der Global.asax.cs-Routen ist kritisch" +1
Jim Aho
Ich konnte nicht verstehen, wie ich testen soll, ob ich die Web-API korrekt hinzugefügt habe. Was genau soll ich in den Browser schreiben? Ich habe geschrieben, http://localhost:12345/api/Get/5aber ich habe einen Fehler bekommen.
Jason
3
Ich habe den "alten Weg" verwendet, um WebApiConfig.Register (GlobalConfiguration.configuration) aufzurufen. und ich konnte nicht mehr debuggen. Ich würde mit dem Debuggen beginnen und es würde niemals meine Controller-Funktionen erreichen. Ich habe auf den "neuen Weg" GlobalConfiguration.Configure (WebApiConfig.Register) gewechselt. und das Problem wurde behoben.
D. Kermott