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.

21voto

Yarkov Anton Punkte 594

Bevor Sie anfangen, MVC- und Web-API-Projekte zu fusionieren, würde ich empfehlen, über Vor- und Nachteile nachzulesen, um diese als separate Projekte zu betrachten. Ein sehr wichtiger Punkt (meiner Meinung nach) sind Authentifizierungssysteme, die völlig unterschiedlich sind.

Wenn Sie authentifizierte Anfragen sowohl in MVC als auch in der Web-API verwenden müssen, sollten Sie bedenken, dass die Web-API RESTful ist (keine Sitzung speichern, einfache HTTP-Anfragen usw.), während MVC dies nicht ist.

Um die Unterschiede in der Implementierung zu sehen, erstellen Sie einfach zwei verschiedene Projekte in Visual Studio 2013 aus Vorlagen: eins für MVC und eins für Web-API (vergessen Sie nicht, während der Erstellung "Individual Authentication" einzuschalten). Sie werden viele Unterschiede in den AuthencationControllers sehen.

Also, seien Sie vorsichtig.

13voto

Hakan Fıstık Punkte 13898

HINWEIS: Dies ist nur eine Abkürzung von dieser Antwort oben

  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 System.Web.Routing, System.Web.Net und System.Net.Http DLLs hinzu, falls sie noch nicht vorhanden sind

  3. Fügen Sie die folgende Klasse hinzu

    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 }
             );
         }
     }
  4. Fügen Sie die Methode Application_Start hinzu, falls sie noch nicht vorhanden ist (in der global.asax.cs-Datei)

    protected void Application_Start()
    {
        //Dies sollte Zeile #1 in dieser Methode sein
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. 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

    namespace 
    {
        public class VSController : ApiController
        {
            // GET api/   : URL für die Verwendung => api/vs
            public string Get()
            {
                return "Hallo vom Web-API-Controller";
            }  
        }
    }

0 Stimmen

Wo genau fügen wir Verweise auf System.Web.Routing, System.Web.Net und System.Net.Http hinzu?

1 Stimmen

Von dem Dialogfeld "Referenz hinzufügen" aus können Sie dieses Dialogfeld öffnen und nach den Namen dieser Assemblys suchen. Es besteht eine gute Chance, dass sie bereits hinzugefügt wurden. (aber nur um sicherzugehen)

0 Stimmen

Sollte die Application_Start-Methode Teil der globalen Klasse in Global.asax.cs sein?

3voto

Die obige Lösung funktioniert perfekt. Ich ziehe es vor, die Web-API-Option zu wählen, wenn ich das Projekttemplate auswähle, wie im Bild unten gezeigt.

Hinweis: Die Lösung funktioniert mit Visual Studio 2013 oder höher. Die ursprüngliche Frage wurde 2012 gestellt und es ist jetzt 2016, daher wird eine Lösung für Visual Studio 2013 oder höher hinzugefügt.

Projekttemplate zeigt die Web-API-Option

2 Stimmen

Wenn Sie ein Projekt erstellen, das Web-APIs involviert, wäre es einfacher, die Web-API-Option zu wählen. Diese Option erstellt alle erforderlichen Dateien, wie in den obigen Antworten erwähnt.

0 Stimmen

Das Problem hier liegt in Visual Studio 2012 und MVC 4. Obwohl deine Lösung genau richtig ist, kannst du es auf diese Weise nicht in VS 2012 machen.

0 Stimmen

Dies ist ein guter Punkt und ich habe die obige Lösung mit VS 2013 ausprobiert. Danke @netfed für den Hinweis.

1voto

iDeveloper Punkte 1544

Ich hatte das gleiche Problem, die Lösung war so einfach

Klicken Sie mit der rechten Maustaste auf die Lösung Installieren Sie Microsoft.ASP.NET.WebApi aus "Nuget-Paket verwalten für Lösung"

Das war's ;)

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