Bawiłem się z ASP.NET MVC 4 beta i teraz widzę dwa typy kontrolerów: ApiController
i Controller
.
Nie jestem zdezorientowany, w jakich sytuacjach mogę wybrać konkretnego kontrolera.
Na przykład: jeśli chcę zwrócić widok, muszę użyć ApiController
lub zwykłego Controller
? Wiem, że interfejs API sieci WCF jest teraz zintegrowany z MVC.
Ponieważ teraz możemy korzystać z obu kontrolerów, ktoś może wskazać, w jakich sytuacjach wybrać odpowiedni kontroler.
ApiController
, aController
więc jeśli używasz nowszej .NET nie trzeba się martwić o ApiController już - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- apiOdpowiedzi:
Użyj kontrolera, aby renderować swoje normalne widoki. Działanie ApiController zwraca tylko dane, które są serializowane i wysyłane do klienta.
tutaj jest link
Zacytować:
ApiControllery specjalizują się w zwracaniu danych. Na przykład dbają o przejrzystą serializację danych do formatu żądanego przez klienta. Ponadto domyślnie stosują inny schemat routingu (jak w: mapowanie adresów URL na działania), zapewniając zgodnie z konwencją interfejs API REST.
Prawdopodobnie możesz zrobić wszystko przy użyciu kontrolera zamiast ApiController z niektórymi (?) Kodowaniami ręcznymi. Ostatecznie oba kontrolery bazują na platformie ASP.NET. Ale posiadanie interfejsu API REST jest dzisiaj tak powszechnym wymogiem, że interfejs WebAPI został utworzony w celu uproszczenia implementacji takiego interfejsu API.
Wybór między tymi dwoma jest dość prosty: jeśli piszesz aplikację internetową / internetową / intranetową opartą na HTML - być może przy sporadycznym wywołaniu AJAX zwracającym json tu i tam - trzymaj się MVC / kontrolera. Jeśli chcesz zapewnić systemowi interfejs oparty na danych / REST, skorzystaj z WebAPI. Można oczywiście połączyć oba, mając ApiController obsługujący wywołania AJAX ze strony MVC.
Podam przykład z prawdziwego świata: Obecnie pracuję z systemem ERP, który zapewnia interfejs API REST dla swoich podmiotów. W przypadku tego interfejsu API WebAPI byłby dobrym kandydatem. Jednocześnie system ERP zapewnia aplikację internetową o wysokim stopniu zaawansowania AJAX, której można używać do tworzenia zapytań do interfejsu API REST. Sama aplikacja internetowa może zostać zaimplementowana jako aplikacja MVC, wykorzystująca interfejs WebAPI do pobierania metadanych itp.
źródło
Który wolisz pisać i utrzymywać?
ASP.NET MVC
ASP.NET Web API
źródło
Controller
klasy.ApiController
po prostu: Controller
działają, czy możesz dodać także nowy przykład kontrolera rdzenia sieci kropkowejJson()
wersję. Jest jaśniejsze i bardziej jednoznaczne. Nie podoba mi się mnóstwo czarnej magii, próbując dowiedzieć się, jak mój kod zareaguje na żądanie.Uwielbiam fakt, że MVC6 programu ASP.NET Core połączył oba wzorce w jeden, ponieważ często muszę obsługiwać oba światy. Chociaż prawdą jest, że możesz dostosować dowolny standardowy MVC
Controller
(i / lub opracować własneActionResult
klasy), aby zachowywał się i zachowywał tak jak onApiController
, może być jednak bardzo trudny do utrzymania i przetestowania: na dodatek mieszanie metod kontrolerówActionResult
z innymi zwracanie nieprzetworzonych / zserializowanych /IHttpActionResult
danych może być bardzo mylące z punktu widzenia programisty, szczególnie jeśli nie pracujesz sam i potrzebujesz przyspieszyć innych programistów dzięki temu hybrydowemu podejściu.Najlepszą techniką, jaką do tej pory doszedłem do zminimalizowania tego problemu w nie-podstawowych aplikacjach internetowych ASP.NET, jest zaimportowanie (i poprawne skonfigurowanie) pakietu Web API do aplikacji internetowej opartej na MVC, dzięki czemu mogę mieć to, co najlepsze z obu światy:
Controllers
dla widoków,ApiControllers
dla danych.Aby to zrobić, musisz wykonać następujące czynności:
Microsoft.AspNet.WebApi.Core
iMicrosoft.AspNet.WebApi.WebHost
./Controllers/
folderu./App_Config/
folderu:Wreszcie, trzeba zarejestrować powyższą klasę do uruchomienia klasy (albo
Startup.cs
alboGlobal.asax.cs
, zależnie od tego czy używasz szablonu OWIN startowy lub nie).Startup.cs
Global.asax.cs
Podejście to - wraz z jego zaletami i wadami - wyjaśniono szerzej w tym poście, który napisałem na moim blogu.
źródło
Controller
zwracanie łańcucha z serializacjąActionResult
Jsona owiniętego wewnątrz jest zdecydowanie trudniejsze do przetestowania i utrzymania niż takie,ApiController
które można ustawić tak, aby bezpośrednio zwracało listę[Serializable]
elementów. Każda metoda testowa byłaby o wiele łatwiejsza do napisania, ponieważ nie trzeba za każdym razem ręcznie usuwać serializacji: to samo można powiedzieć o prawie każdym zadaniu integracji systemu z ASP.NET lub innymi platformami.Controllers
są świetne, aleApiControllers
lepiej nadają się do zadań RESTful, przynajmniej w .NET Framework 4.xKażda metoda w interfejsie API sieci Web zwraca dane (JSON) bez serializacji.
Aby jednak zwrócić dane JSON w kontrolerach MVC, ustawimy zwracany typ wyniku działania na JsonResult i wywołamy metodę Json na naszym obiekcie, aby upewnić się, że jest on spakowany w JSON.
źródło
Główna różnica polega na tym, że: Web API to usługa dla dowolnego klienta, dowolnego urządzenia, a MVC Controller obsługuje tylko swojego klienta. To samo, ponieważ jest to platforma MVC.
źródło
Wybór między tymi dwoma jest dość prosty: jeśli piszesz aplikację internetową / internetową / intranetową opartą na HTML - być może przy sporadycznym wywołaniu AJAX zwracającym json tu i tam - trzymaj się MVC / kontrolera. Jeśli chcesz zapewnić systemowi interfejs oparty na danych / REST, skorzystaj z WebAPI. Można oczywiście połączyć oba, mając ApiController obsługujący wywołania AJAX ze strony MVC. Zasadniczo kontroler służy do mvc, a kontroler interfejsu API służy do Rest-API, którego można używać zarówno w tym samym programie, jak potrzebujesz
źródło