373 Stimmen

Wie füge ich eine Web-API zu einem bestehenden ASP.NET MVC 4 Webanwendungsprojekt hinzu?

Ich möchte einem ASP.NET MVC 4-Webanwendungsprojekt, das in Visual Studio 2012 entwickelt wurde, eine ASP.NET Web API hinzufügen. Welche Schritte muss ich ausführen, um eine funktionierende Web API dem Projekt hinzuzufügen? Ich weiß, dass ich einen Controller benötige, der von ApiController abgeleitet ist, aber das ist alles, was ich weiß.

Lassen Sie mich wissen, ob ich weitere Details bereitstellen muss.

475voto

aknuds1 Punkte 61744

Die Schritte, die ich ausführen musste, waren:

  1. Verweis auf System.Web.Http.WebHost hinzufügen.
  2. App_Start\WebApiConfig.cs hinzufügen (siehe Code-Schnipsel unten).
  3. Namespace System.Web.Http in Global.asax.cs importieren.
  4. WebApiConfig.Register(GlobalConfiguration.Configuration) in MvcApplication.Application_Start() aufrufen (in der Datei Global.asax.cs), bevor der Standard-Webanwendungsroute registriert wird, da dieser sonst Vorrang hätte.
  5. Ein Controller hinzufügen, der von System.Web.Http.ApiController abgeleitet ist.

Daraufhin konnte ich aus dem Tutorial (Your First ASP.NET Web API) genug lernen, um meinen API-Controller zu definieren.

App_Start\WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Update 16.10.2015:

Es wird gemunkelt, dass das NuGet-Paket Microsoft.AspNet.WebApi installiert sein muss, damit das oben genannte funktioniert.

13 Stimmen

Das war wirklich hilfreich. Ich musste auch eine Referenz zu System.Net.Http hinzufügen, aber abgesehen davon hat es wie ein Zauber funktioniert!

1 Stimmen

Cool, Ich habe gerade getestet, indem ich ein neues MVC 4 Internet-Projekt erstellt habe, und es verweist bereits auf System.Net.Http. Vielleicht unterscheidet sich dein Fall leicht?

0 Stimmen

Ja, meine Anwendung war eine MVC 3-Anwendung, die ich manuell auf MVC 4 aktualisiert hatte. Ich weiß nicht, ob das der Grund sein könnte.

83voto

kheya Punkte 7336

Um WebAPI in meinem MVC 5 Projekt hinzuzufügen.

  1. Öffnen Sie die NuGet-Paket-Manager-Konsole und führen Sie aus

    PM> Install-Package Microsoft.AspNet.WebApi
  2. Fügen Sie Verweise auf die dlls System.Web.Routing, System.Web.Net und System.Net.Http hinzu, falls sie noch nicht vorhanden sind

  3. Klicken Sie mit der rechten Maustaste auf den Ordner "Controllers" > fügen Sie ein neues Element hinzu > Web > Fügen Sie einen Web-API-Controller hinzu

  4. Die Web.config wird entsprechend von VS geändert

  5. Fügen Sie die Methode Application_Start hinzu, falls noch nicht vorhanden

    protected void Application_Start()
    {
        //dies sollte die erste Zeile in dieser Methode sein
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. Fügen Sie die folgende Klasse hinzu (ich habe sie in die global.asax.cs-Datei hinzugefügt)

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web-API-Routen
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  7. Passen Sie die Web-API-Methode entsprechend an

    namespace 
    {
        public class VSController : ApiController
        {
            // GET api/   : URL zum Verwenden => api/vs
            public string Get()
            {
                return "Hallo vom Web-API-Controller";
            }
    
            // GET api//5   : URL zum Verwenden => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
  8. Erstellen und testen

  9. Erstellen Sie eine einfache HTML-Seite

            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('erhalten: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('Erfolg1');
                        var res = parseInt(data);
                        alert('erhalten res=' + res);
                    }
                });
            });
    
    ....

2 Stimmen

Der Punkt, der einen Unterschied gemacht hat, war das Platzieren von WebApiconfig.Register in der ersten Zeile, wie von @kheya erwähnt.

0 Stimmen

Ich möchte hinzufügen, dass der Name Ihres API-Controllers mit Controller enden muss, wie z.B. CarController (nicht nur Car)!!! Viele Leute vergessen das und erhalten die Fehlermeldung "Es wurde kein Typ gefunden, der mit dem Controller-Namen {0} übereinstimmt"

1 Stimmen

Um effizienter mit dieser guten Antwort umzugehen, können Sie Schritte 4, 8 und 9 ignorieren. (sie sind nicht so wichtig) Und wenn Sie die Reihenfolge von Schritt 5 und 6 vertauschen, werden sie mehr Sinn ergeben (es ist besser, eine Klasse zu erstellen und dann zu verwenden, anstatt sie zu verwenden und dann zu erstellen)

81voto

cdeutsch Punkte 3769

UPDATE 11/22/2013 - Dies ist das neueste WebApi-Paket:

Install-Package Microsoft.AspNet.WebApi

Ursprüngliche Antwort (dies ist ein älteres WebApi-Paket)

Install-Package AspNetWebApi

Weitere Details.

3 Stimmen

Ab 2013 handelt es sich bei diesem Paket um ein veraltetes Paket und Sie möchten jetzt Install-Package Microsoft.AspNet.WebApi. Siehe nuget.org/packages/Microsoft.AspNet.WebApi

29voto

Teoman shipahi Punkte 45327

Sobald Sie einen "WebApi Controller" im Ordner "Controllers" hinzufügen, kümmert sich Visual Studio automatisch um Abhängigkeiten;

Visual Studio hat den vollständigen Satz von Abhängigkeiten für ASP.NET Web API 2 zum Projekt 'MyTestProject' hinzugefügt.

Die Datei Global.asax.cs im Projekt benötigt möglicherweise zusätzliche Änderungen, um ASP.NET Web API zu aktivieren.

  1. Fügen Sie die folgenden Namespace-Verweise hinzu:

    using System.Web.Http; using System.Web.Routing;

  2. Falls der Code noch keine Application_Start-Methode definiert, fügen Sie die folgende Methode hinzu:

    protected void Application_Start() { }

  3. Fügen Sie die folgenden Zeilen am Anfang der Application_Start-Methode hinzu:

    GlobalConfiguration.Configure(WebApiConfig.Register);

0 Stimmen

Dies ist mit Abstand der einfachste Weg, dies jetzt zu erreichen.

1 Stimmen

Funktioniert hier nicht. 1. Nuget: Install-Package Microsoft.AspNet.WebApi 2. Fügen Sie ein neues Element "Web API Controller Klasse (v2.1)" hinzu. Ergebnis: fügt den API-Controller hinzu, ändert jedoch nicht Application_Start. Mit Owin.

2 Stimmen

Das ist die richtige Antwort, wenn Sie VS2015 - Update 3 haben und einen Web API 2 Controller hinzufügen.

22voto

cuongle Punkte 71553

Sie können wie im untenstehenden Bild aus NuGet installieren:

Bildbeschreibung hier eingeben

Oder führen Sie die folgende Befehlszeile in der Paket-Manager-Konsole aus:

Install-Package Microsoft.AspNet.WebApi

3 Stimmen

Also, was muss ich sonst noch tun, außer den Controller hinzuzufügen? Das ist der Grund, warum ich diese Frage überhaupt gepostet habe, das Tutorial sagt nicht wirklich, da es von einem Web-API-Projekt ausgeht. Ich habe einen API-Controller hinzugefügt, aber er wird nicht geroutet.

1 Stimmen

Der Tutorial war nicht sehr hilfreich, wenn es darum geht, eine Web-API zu einem bestehenden Projekt hinzuzufügen, also habe ich es aus einem Web-API-Projekt herausgefunden, wie es in meiner Antwort beschrieben ist.

0 Stimmen

Ich stimme zu, es scheint, dass diese Installation bereits vorhanden ist, wenn Sie die Projektvorlage für die Web-App verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X