Różnica między projektem MVC 5 a projektem Web Api


135

Jestem nowy w ASP.NET MVC i interfejsie API sieci Web i próbuję zdobyć podstawy. AFAIK, mamy szablony projektów w VS 2013, nazwany MVC, Web APIi Both of them together.

Przeszedłem przez samouczki i dowiedziałem się, że możemy stworzyć interfejs API, używając samego MVC, a także szablonu Web API.

Więc jakie są różnice między nimi, w oparciu o architekturę i użycie ?

Odpowiedzi:


182

Zasadniczo Web APIkontroler to MVCkontroler, który HttpMessageResponsejako podstawowy typ swojej odpowiedzi używa zamiast ActionResponse. Pod wieloma innymi względami są takie same. Główna różnica między typami projektów polega na tym, że MVC Applicationtyp projektu dodaje elementy specyficzne dla sieci Web, takie jak domyślne CSS, JavaScriptpliki i inne zasoby potrzebne do witryny internetowej, które nie są potrzebne do interfejsu API.

MVC służy do tworzenia witryn internetowych. W takim przypadku Controllerszwykle zwraca View(tj. Odpowiedź HTML) na żądania przeglądarki. Z drugiej strony internetowe interfejsy API są zwykle przeznaczone do używania przez inne aplikacje. Jeśli chcesz zezwolić innym aplikacjom na dostęp do Twoich danych / funkcji, możesz utworzyć interfejs API sieci Web, aby ułatwić ten dostęp. Na przykład Facebook ma interfejs API, aby umożliwić twórcom aplikacji dostęp do informacji o użytkownikach korzystających z aplikacji. Interfejsy API sieci Web nie muszą być przeznaczone do użytku publicznego. Możesz także utworzyć interfejs API do obsługi własnych aplikacji. Na przykład utworzyliśmy internetowy interfejs API do obsługi funkcji AJAX naszej witryny internetowej MVC.

Microsoft zmienił sposób, w jaki prezentują różne szablony. Teraz zamiast używać różnych szablonów dla różnych typów projektów, zachęcają deweloperów do mieszania technologii ASP.NET w ramach tego samego projektu w razie potrzeby. Microsoft nazywa to vNext.

AKTUALIZACJA: W przypadku ASP.NET Core interfejs API sieci Web został zintegrowany z typem projektu MVC 6, a ApiControllerklasa jest skonsolidowana z Controllerklasą. Więcej szczegółów na: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6


1
Dzięki, Elad, mam to. Możesz edytować swoje odpowiedzi i dodawać informacje o tożsamości Asp.net i interfejsie Web Api 2. Tylko kilka słów, w jaki sposób będą one używane i jakie korzyści.
pętla

Tak więc w żaden sposób nie mogę uzyskać dostępu do akcji kontrolera z aplikacji dektop. nawet jeśli użyję właściwej składni GET do wywołania adresu URL?
Unbreakable

70

Moje dwa centy...

  1. W ASP.Net MVC - MVC Controllerdecyduje, co powinno być View- tj. Kontroler decyduje, co użytkownik powinien „zobaczyć” (na podstawie aktualnego scenariusza lub kontekstu), kiedy wysyła żądanie.
  2. W Form ASP.Net Web , gdy ASPXstrony decyduje, co użytkownik powinien „widzieć”, kiedy złożyć zamówienie.
  3. Jednak w interfejsie API sieci Web żadna z funkcji interfejsu API sieci Web nie ma żadnej kontroli ani możliwości decydowania o tym, co użytkownik powinien „widzieć”, gdy wysyła żądanie.

Interfejs API sieci Web NIE jest technologią związaną wyłącznie z witrynami internetowymi. Może być używany do wielu celów - nie tylko do witryn internetowych. Więc nie zna znaczeniarendering

Dalsze czytanie

  1. Planowanie rozwiązań internetowych dzisiaj: formularze internetowe, ASP.NET MVC, Web API i OWIN.
  2. Interfejsy API sieci Web WCF lub ASP.NET? Moje dwa centy w tej sprawie
  3. Następna generacja .NET - ASP.NET vNext
  4. Wprowadzenie do ASP.NET MVC 6

Na podstawie porównywanych kodów nie potrafię stwierdzić, dlaczego WebAPI jest bardziej czytelne. Wygląda również na to, że jest tam coś przerzuconego, ponieważ to API sieci Web powinno mieć atrybut metody HTTP, taki jak [HttpGet]. Sprawdź kod WebAPI (i WebAPI 2) tutaj
Gobe,

2
Zaakceptowana odpowiedź brzmi: „Zasadniczo kontroler interfejsu API sieci Web jest kontrolerem MVC”. To po prostu nie tak. Twoja odpowiedź wskazuje, że cały PUNKT WebAPI polega na tym, że NIE JEST MVC, NIE MUSI zajmować się całym bagażem i narzutami związanymi z „wyświetleniami” i „renderowaniem”. ... a kontrolery WebApi nie muszą nawet być powiązane tylko z witrynami internetowymi. Bardzo dobra odpowiedź - dziękuję!
FoggyDay,

0

Kontroler MVC pochodzący z klasy kontrolera. W Mvc możesz zwracać widoki. Architektura MVC używa do tworzenia aplikacji. Jednak interfejsy API sieci Web są używane do dostarczania danych do różnych aplikacji.

Web Api jest uruchamiany z kontrolera Api i nie zwraca widoku.

Uwaga: możesz również utworzyć interfejs API sieci Web z kontrolera MVC, ale musisz zwrócić wynik jako JsonResult lub inne typy zwracane obsługiwane przez interfejs API sieci Web.


0

Oprócz odpowiedzi już tu udzielonych, warto zwrócić uwagę na każdy kontroler, który dziedziczy po ApiController i posiadający akcję z czasownikiem Http POST może mieć tylko jeden parametr wejściowy [FromBody]. Jeśli używasz kontrolera MVC (pochodzącego od „Kontrolera”), możesz mieć wiele parametrów wejściowych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.