Jak dodać interfejs API sieci Web do istniejącego projektu aplikacji sieci Web ASP.NET MVC (5)?

146

Zakładając, że zapomniałeś zaznaczyć pole wyboru Web API (dodać je do projektu) podczas tworzenia nowego projektu MVC (5), co musisz zrobić, aby dodać Web API i sprawić, by działał?

Jest kilka pytań dotyczących migracji, ale żadne nie wydawało się zawierać kompletnych i aktualnych kroków dodawania interfejsu API sieci Web do projektu MVC 5 i wydaje się, że zmieniło się w stosunku do niektórych starych odpowiedzi.

Dodaj interfejs API sieci Web do MVC 4

Dodanie GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

lko
źródło

Odpowiedzi:

253

Zaktualizuj projekt MVC

Użyj Nuget, aby uzyskać najnowszy internetowy interfejs API.

Projekt - kliknij prawym przyciskiem myszy - Zarządzaj pakietami Nuget - Wyszukaj interfejs API sieci Web (Microsoft ASP.NET Web API ...) i zainstaluj go w projekcie MVC.

Wtedy nadal musisz sprawić, by routing Web API działał. Z poziomu konfiguracyjnego interfejsu API sieci Web ASP.NET firmy Microsoft 2

Dodaj WebApiConfig.cs do folderu 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();
        }
    }
}

Jeśli masz projekt MVC, będzie on zawierał Global.asax.cs , dodaj nowe trasy. Kolejność tras Global.asax.cs jest krytyczna. Zauważ, że istnieją przestarzałe przykłady, które używają WebApiConfig.Register

Dodaj tę linię do 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);
}

Pomoc WebAPI

Aby uzyskać ( bardzo ) pomocne strony pomocy WebAPI , zainstaluj WebAPI.HelpPage. Zobacz http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 minuty), aby dowiedzieć się, co robi. Wygląda to bardzo pomocne!

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

Aby sprawdzić, czy działa WebAPI:

Do folderu kontrolerów -> Dodaj nowy element -> Klasa kontrolera interfejsu API sieci 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";
    }
    //...
}

Teraz możesz normalnie testować w IE / FF / Chrome lub w konsolach JavaScript w celu testowania bez pobierania.

(Z samym kontrolerem w adresie URL wywoła akcję GET () w nowym kontrolerze Web API, jest on automatycznie mapowany na metody / akcje w zależności od REST, np. PUT / POST / GET / DELETE. Nie musisz wywoływać je działając jak w MVC) Adres URL bezpośrednio:

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

Alternatywnie użyj jQuery, aby wysłać zapytanie do kontrolera. Uruchom projekt, otwórz konsolę (F12 w IE) i spróbuj uruchomić zapytanie Ajax. (Sprawdź swój PORT I NAZWĘ KONTROLERA)

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

Uwaga dodatkowa: podczas łączenia MVC i interfejsu API sieci Web w projekcie należy wziąć pod uwagę kilka zalet / wad

Weryfikacja pomocy WebAPI: http://localhost:PORT/help

lko
źródło
@ Iko Zrobiłem wszystko, co napisałeś w kodzie, ale mam błąd, kiedy go uruchamiam. daje mi błąd
ninjaXnado
1
Spróbuj wyszukać komunikat o błędzie. Te kroki były zasadniczo tym, co było wymagane w przypadku ogólnym.
lko
13
„Kolejność tras Global.asax.cs jest krytyczna” +1
Jim Aho,
Nie mogę zrozumieć, jak sprawdzić, czy poprawnie dodałem interfejs API sieci Web? Co dokładnie mam napisać do przeglądarki? Napisałem http://localhost:12345/api/Get/5ale wyskoczył mi błąd.
jason
3
Używałem „starego sposobu” wywoływania WebApiConfig.Register (GlobalConfiguration.configuration); i nie mogłem już debugować. Zacząłbym debugować i nigdy nie dotarłoby to do moich funkcji kontrolera. Zmieniłem na „nowy sposób” GlobalConfiguration.Configure (WebApiConfig.Register); i problem został rozwiązany.
D. Kermott