Różnica między Apicontrollerem a kontrolerem w ASP.NET MVC
I ' ve been playing around with ASP.NET MVC 4 beta i widzę teraz dwa typy kontrolerów: ApiController
i Controller
.
For ex: jeśli chcę zwrócić Widok, to muszę użyć ApiController
lub zwykłego Controller
? Wiem, że WCF Web API jest teraz zintegrowany z MVC.
Od teraz możemy używać obu kontrolerów czy ktoś może wskazać w jakich sytuacjach przejść do odpowiedniego kontrolera.
5 answers
Użyj kontrolera do renderowania normalnych widoków. Akcja ApiController zwraca tylko dane serializowane i wysyłane do klienta.
Cytat:
Uwaga jeśli pracowałeś z ASP.NET MVC, wtedy jesteś już zaznajomiony ze sterownikami. Działają podobnie w Web API, ale Kontrolery w Web API wywodzą się z klasy ApiController zamiast klasy kontrolera. Pierwszą dużą różnicą, którą zauważysz, jest to, że działania w Web API Kontrolery nie zwracają widoków, zwracają dane.
Apicontrollery specjalizują się w zwracaniu danych. Na przykład dbają o transparentną serializację danych do formatu żądanego przez Klienta. Ponadto domyślnie kierują się innym schematem routingu (jak w: mapowanie adresów URL do akcji), zapewniając interfejs API REST-ful według konwencji.
Prawdopodobnie możesz zrobić wszystko używając kontrolera zamiast Apicontrollera z some(?) kodowanie ręczne. W końcu, zarówno Kontrolery bazują na ASP.NET Fundacja. Ale posiadanie REST-ful API jest dziś tak powszechnym wymogiem, że WebAPI zostało stworzone w celu uproszczenia implementacji takiego API.
Jest to dość proste, aby zdecydować między nimi: jeśli piszesz HTML oparte web/internet/intranet aplikacji-może z okazjonalnych połączeń AJAX zwracając json tu i ówdzie-trzymaj się MVC / Controller. Jeśli chcesz zapewnić systemowi interfejs oparty na danych/REST-ful, skorzystaj z WebAPI. Możesz połącz oba, oczywiście, mając ApiController obsługujący połączenia AJAX ze strony MVC.
Aby podać przykład z prawdziwego świata: obecnie pracuję z systemem ERP, który zapewnia Rest-ful API dla swoich podmiotów. Dla tego API WebAPI byłby dobrym kandydatem. Jednocześnie system ERP zapewnia wysoce AJAX-ified aplikacji internetowej, które można wykorzystać do tworzenia zapytań dla Rest-ful API. Sama aplikacja webowa może być zaimplementowana jako aplikacja MVC, wykorzystując WebAPI do pobieranie metadanych itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-03 20:34:44
Co wolisz pisać i utrzymywać?
ASP.NET MVC
public class TweetsController : Controller {
// GET: /Tweets/
[HttpGet]
public ActionResult Index() {
return Json(Twitter.GetTweets(), JsonRequestBehavior.AllowGet);
}
}
ASP.NET Web API
public class TweetsController : ApiController {
// GET: /Api/Tweets/
public List<Tweet> Get() {
return Twitter.GetTweets();
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 13:18:44
Kocham fakt, że ASP.NET Core MVC6 połączył dwa wzorce w jeden, ponieważ często muszę obsługiwać oba światy. Chociaż prawdą jest, że można dostosować dowolny standardowy MVC Controller
(i / lub stworzyć własne ActionResult
klasy) tak, aby działał i zachowywał się jak ApiController
, może to być bardzo trudne do utrzymania i przetestowania: Ponadto, posiadanie kontrolerów metod zwracającychActionResult
zmieszanych z innymi zwracającymi surowe/serializowane / IHttpActionResult
dane mogą być bardzo mylące z punktu widzenia programisty, szczególnie jeśli nie pracujesz sam i musisz przyspieszyć działanie innych programistów dzięki temu hybrydowemu podejściu.
Najlepsza technika, jaką do tej pory osiągnąłem, aby zminimalizować ten problem w ASP.NET nie-Core web applications polega na zaimportowaniu (i prawidłowej konfiguracji) pakietu Web API do aplikacji webowej opartej na MVC, dzięki czemu mogę mieć to, co najlepsze z obu światów: {[8] } dla widoków, ApiControllers
dla danych.
Aby to zrobić, musisz wykonać następujące czynności:
- zainstaluj następujące pakiety Web API używając NuGet:
Microsoft.AspNet.WebApi.Core
iMicrosoft.AspNet.WebApi.WebHost
. - Dodaj jeden lub więcej kontrolerów Apicontroller do folderu
/Controllers/
. - Dodaj następujący WebApiConfig.plik cs do folderu
/App_Config/
:
using System.Web.Http;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Na koniec musisz zarejestrować powyższą klasę do swojej klasyStartup (albo Startup.cs
lub Global.asax.cs
, w zależności od tego, czy używasz szablonu startowego OWIN, czy nie).
Startup.cs
public void Configuration(IAppBuilder app)
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
// ...
}
Global.asax.cs
protected void Application_Start()
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// ...
}
To podejście-wraz z jego zaletami i wadami - zostało wyjaśnione w w następującym poście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 15:32:29
Każda metoda W Web API zwróci dane (JSON) bez serializacji.
Jednakże, w celu zwrócenia danych JSON w kontrolerach MVC, ustawimy Typ wyniku zwracanej akcji na JsonResult i wywołamy metodę Json na naszym obiekcie, aby upewnić się, że jest ona zapakowana w JSON.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 04:16:01
Jest to dość proste, aby zdecydować między nimi: jeśli piszesz HTML oparte web/internet/intranet aplikacji-może z okazjonalnych połączeń AJAX zwracając json tu i ówdzie-trzymaj się MVC / Controller. Jeśli chcesz zapewnić systemowi interfejs oparty na danych/REST-ful, skorzystaj z WebAPI. Możesz połączyć oba, oczywiście, mając apicontroller obsługujący połączenia AJAX ze strony MVC. Zasadniczo kontroler jest używany do mvc i api-kontroler jest używany do Rest- API można używać zarówno w tym samym program jako twoja potrzeba