Differenza tra il progetto MVC 5 e il progetto Web Api


135

Sono nuovo di ASP.NET MVC e API Web e sto cercando di ottenere le basi. Per quanto ne so, abbiamo modelli di progetto in VS 2013, come il nome MVC, Web APIe Both of them together.

Ho seguito i tutorial e ho appreso che possiamo creare un'API utilizzando MVC da solo e con il modello di API Web.

Quindi, quali sono le differenze tra queste, basate su architettura e utilizzo ?

Risposte:


182

Fondamentalmente, un Web APIcontroller è un MVCcontroller, che utilizza HttpMessageResponsecome tipo di base la sua risposta, anziché ActionResponse. Sono gli stessi per molti altri aspetti. La differenza principale tra i tipi di progetto è che il MVC Applicationtipo di progetto aggiunge elementi specifici del Web come valori predefiniti CSS, JavaScriptfile e altre risorse necessarie per un sito Web, che non sono necessari per un'API.

MVC viene utilizzato per la creazione di siti Web. In questo caso di Controllerssolito restituisce una View(ovvero una risposta HTML) alle richieste del browser. Le API Web, d'altra parte, vengono generalmente utilizzate per essere utilizzate da altre applicazioni. Se si desidera consentire ad altre applicazioni di accedere ai propri dati / funzionalità, è possibile creare un'API Web per facilitare questo accesso. Ad esempio, Facebook ha un'API per consentire agli sviluppatori di app di accedere alle informazioni sugli utenti che utilizzano l'app. Le API Web non devono essere destinate al consumo pubblico. Puoi anche creare un'API per supportare le tue applicazioni. Ad esempio, abbiamo creato un'API Web per supportare la funzionalità AJAX del nostro sito Web MVC.

Microsoft ha cambiato il modo in cui presentano i diversi modelli. Ora invece di utilizzare modelli diversi per diversi tipi di progetto, incoraggiano gli sviluppatori a mescolare le tecnologie ASP.NET all'interno dello stesso progetto, se necessario. Microsoft chiama questo vNext.

AGGIORNAMENTO: Per ASP.NET Core, l'API Web è stata integrata nel tipo di progetto MVC 6 e la ApiControllerclasse è consolidata nella Controllerclasse. Ulteriori dettagli su: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6


1
Grazie Elad ho capito.Puoi apportare modifiche al tuo ans e aggiungere qualcosa su Asp.net Identity e Web Api 2 Solo alcuni come verranno utilizzati e trarranno beneficio. Solo alcune parole.
loop

Quindi, in nessun modo posso accedere a un'azione del controller dall'app dektop. anche se utilizzo la sintassi GET corretta per chiamare l'URL?
Infrangibile il

70

I miei due centesimi...

  1. In ASP.Net MVC - l'MVC Controllerdecide quale dovrebbe essere View- ovvero, il controller decide ciò che l'utente dovrebbe "vedere" (in base allo scenario o al contesto corrente), quando effettua una richiesta.
  2. In ASP.Net Web Forms , le ASPXpagine decidono cosa l'utente deve "vedere" quando effettua una richiesta.
  3. Ma nell'API Web , non vi è alcun controllo / potere su nessuna delle funzionalità dell'API Web per decidere ciò che l'utente dovrebbe "vedere" quando effettua una richiesta.

L'API Web NON è una tecnologia legata solo ai siti Web. Può essere utilizzato per diversi scopi, non solo per i siti Web. Quindi non conosce il significato direndering

Ulteriori letture

  1. Pianificazione delle soluzioni Web oggi: Web Form, ASP.NET MVC, API Web e OWIN.
  2. API Web WCF o ASP.NET? I miei due centesimi sull'argomento
  3. La prossima generazione di .NET - ASP.NET vNext
  4. Introduzione a ASP.NET MVC 6

Dai codici comparati non so dire perché WebAPI sia più leggibile. Inoltre, sembra che ci sia qualcosa capovolto lì, poiché è l'API Web quella che dovrebbe avere un attributo del metodo HTTP come [HttpGet]. Controlla un po 'di codice WebAPI (e WebAPI 2) qui
Gobe,

2
La risposta accettata afferma "Fondamentalmente, un controller API Web è un controller MVC". È semplicemente sbagliato. La tua risposta sottolinea che l'intero PUNTO di WebAPI è che NON È MVC, NON DEVE gestire tutto il bagaglio e le spese generali per gestire "Viste" e "rendering". ... e i controller WebApi non devono nemmeno essere collegati solo a siti Web. Ottima risposta - grazie!
FoggyDay

0

Controller MVC derivato dalla classe controller. In Mvc è possibile restituire visualizzazioni. L'architettura di mvc utilizza per creare un'applicazione. Tuttavia, le API Web vengono utilizzate per fornire dati a varie applicazioni.

Web Api si aziona dal controller Api e non restituisce la vista.

Nota: è anche possibile creare API Web dal controller MVC ma è necessario restituire il risultato come JsonResult o altri tipi di restituzione supportati da API Web.


0

Oltre alle risposte già fornite qui, vale la pena notare qualsiasi controller che eredita da ApiController e che ha un'azione con il verbo HOST POST può avere solo un parametro di input [FromBody]. Se si utilizza un controller MVC (derivante da "Controller") è possibile disporre di numerosi parametri post input.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.