Buduję aplikację ASP.NET MVC, która jest obciążona skryptami klienta, będzie używać JSON i jQuery do manipulowania DOM.
Rozumiem, że zarówno kontroler interfejsu API sieci Web, jak i kontroler MVC mogą zwracać JSON.
Biorąc pod uwagę mój scenariusz, czy powinienem używać kontrolera internetowego interfejsu API czy kontrolera MVC ?
json
asp.net-mvc
asp.net-web-api
Nil Pun
źródło
źródło
Odpowiedzi:
Kontrolery internetowego interfejsu API można tworzyć i hostować w dowolnej aplikacji ASP.NET, nie tylko w aplikacjach MVC. Dlatego oczywistym powodem tworzenia internetowego interfejsu API jest brak front-endu MVC (np. Klasyczne, zgodne z REST usługi internetowe hostowane przez firmę / organizację).
Kontrolery MVC zwykle opierają się na strukturze MVC, jeśli spojrzysz na domyślne szablony i większość pracy wykonanej przez społeczność i rówieśników, zauważysz, że prawie wszystkie kontrolery MVC są implementowane z myślą o widoku.
Osobiście używam kontrolerów MVC, gdy zamierzam odpowiedzieć za pomocą View (), i użyję internetowego interfejsu API do wszystkiego, co nie jest zależne od określonego widoku.
Istnieją oczywiście pewne zastrzeżenia, ale ogólnie rzecz biorąc, jeśli nie potrzebujesz zachowania powiązania modelu MVC, Twoja usługa jest zorientowana na dane, a operacje są zorientowane na dane (np. Operacje CRUD), prawdopodobnie potrzebujesz `` kontrolera internetowego interfejsu API 'zamiast' kontrolera widoku modelu '. I odwrotnie, jeśli twoje operacje są skoncentrowane na widoku (np. Dostarczanie użytkownikowi strony administratora) lub potrzebujesz powiązania modelu MVC do generowania „częściowych ajax” (bardzo mało prawdopodobne), wtedy będziesz potrzebował kontrolera MVC.
Osobiście używam kontrolerów Web API do sterowania klientami RESTful opartymi na JSON, używam kontrolerów MVC do obsługi podstawowego routingu przeglądarki i dostarczania SPA.
źródło
WebAPI służy do tworzenia API. Jeśli chcesz, aby ktoś mógł korzystać z twojego API w XML, JSON itp. Możesz stworzyć webowy api.
W Twoim przypadku wystarczy rozmawiać z klientem w formacie JSON.
Nawet jeśli Twoja witryna jest w większości sterowana skryptami klienta, nadal korzystasz z kontrolera ASP.NET MVC, prawda? A ponieważ być może już logicznie podzieliłeś kontrolery na podstawie encji, sensowne jest dodanie do nich tych metod obsługi json, w przeciwieństwie do tworzenia innej klasy specjalnie dla interfejsu API sieci Web.
Więc w twojej konkretnej sytuacji (jeśli dobrze rozumiem), trzymałbym się kontrolerów.
źródło
Odpowiedź sprowadza się do oddzielenia obaw, przyspieszenia tworzenia usług i oparcia się raczej na konwencji niż na konfiguracji.
Głównym obowiązkiem kontrolerów jest praca jako koordynator między widokiem a modelem, ale głównym obowiązkiem API jest praca na danych. W przypadku API zastosowane konwencje bardzo ułatwiają wykonywanie operacji CRUD. Poniżej znajduje się mapowanie między operacją CRUD a akcjami HTTP
Dzięki interfejsom API nie musisz tworzyć oddzielnych akcji i przypisywać im działań HTTP.
źródło
Jedynym problemem, jaki mam z ApiController, jest to, że jest oparty na witrynie, a nie na obszarze. Jedna witryna może mieć tylko jeden podfolder apicontroller, w którym można nazwać metody kontrolera. Są sytuacje, w których możesz chcieć zduplikować nazwę kontrolera w różnych obszarach:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
Pamiętam, że istnieją pewne niestandardowe ustawienia kodu, aby to zrobić, ale domyślnie nie działa.
źródło
Zgadzam się z odpowiedzią Shauna Wilsona (najlepsza odpowiedź), ale nie wiem dlaczego, ponieważ jestem trochę zdezorientowany i wciąż próbuję zrozumieć z następującym (prawdopodobnie niepoprawnym) przeczuciem:
Widzisz, po prostu nie wiem, dlaczego się tutaj mylę i jestem zdezorientowany, ponieważ ostatnia linijka odpowiedzi Shauna brzmi: „Używam kontrolerów MVC do obsługi podstawowego routingu przeglądarki i dostarczania SPA”. - może nie do końca wiem, czym jest spokojny klient, gdy założyłem, że może to być metoda JavaScript, która otrzymuje odpowiedź w postaci JSON. to jest najbliższy post w Stackoverflow, który był zdalnie powiązany jako odpowiedź na moje pytanie, więc odpowiadam na ten post, zamiast ewentualnie powielać pytania.
źródło
W tym scenariuszu polecam WebApi, ponieważ jest idealny do przesyłania takich danych na podstawie żądań Javascript. Zwykle tworzę kontrolery WebApi tak, aby zwracały obiekt przyjazny dla formatu JSON, który można następnie łatwo przeanalizować za pomocą mojego JavaScript.
Jedynym czasem rzeczywistym, w którym chciałbyś użyć akcji na kontrolerze MVC do tego rodzaju rzeczy, byłoby wygenerowanie kodu HTML i zastąpienie segmentów strony wywołaniami JavaScript.
Na przykład:
Masz JQuery UI Datepicker, który po dokonaniu wyboru generuje listę przycisków radiowych reprezentujących wydarzenia w wybranym dniu.
W tym scenariuszu można użyć WebApi do zwrócenia części kodu JSON, a następnie wygenerowania niezbędnego kodu HTML za pomocą JavaScript, ale generalnie tworzenie dużej ilości kodu HTML przy użyciu JavaScript jest złą praktyką. Byłoby znacznie lepiej, gdyby C # utworzył kod HTML, a następnie zwrócił go za pośrednictwem częściowego widoku, ponieważ w ten sposób mniej prawdopodobne jest napotkanie błędów podczas analizowania kodu JavaScript. Nie wspominając o tym, że znacznie ułatwia pisanie HTML.
źródło