Diferença entre o MVC 5 Project e o Web Api Project

135

Eu sou novo no ASP.NET MVC e na Web API e estou tentando obter o básico. AFAIK, temos modelos de projeto no VS 2013, nomeados como MVC, Web APIe Both of them together.

Passei pelos tutoriais e aprendi que podemos criar uma API usando o MVC sozinho e também com o modelo de API da Web.

Então, quais são as diferenças entre elas, com base na arquitetura e no uso ?

ciclo
fonte

Respostas:

182

Basicamente, um Web APIcontrolador é um MVCcontrolador, que usa HttpMessageResponsecomo tipo base de sua resposta, em vez de ActionResponse. Eles são os mesmos na maioria dos outros aspectos. A principal diferença entre os tipos de projeto é que o MVC Applicationtipo de projeto adiciona itens específicos da Web, como padrão CSS, JavaScriptarquivos e outros recursos necessários para um site, que não são necessários para uma API.

O MVC é usado para criar sites. Nesse caso, Controllersgeralmente retorne uma View(ou seja, resposta HTML) às solicitações do navegador. As APIs da Web, por outro lado, geralmente são feitas para serem consumidas por outros aplicativos. Se você deseja permitir que outros aplicativos acessem seus dados / funcionalidade, é possível criar uma API da Web para facilitar esse acesso. Por exemplo, o Facebook possui uma API para permitir que os desenvolvedores de aplicativos acessem informações sobre usuários que usam o aplicativo. As APIs da Web não precisam ser para consumo público. Você também pode criar uma API para suportar seus próprios aplicativos. Por exemplo, criamos uma API da Web para suportar a funcionalidade AJAX do nosso site MVC.

A Microsoft mudou a maneira como eles apresentam os diferentes modelos. Agora, em vez de usar modelos diferentes para diferentes tipos de projeto, eles incentivam os desenvolvedores a misturar as tecnologias do ASP.NET dentro do mesmo projeto, conforme necessário. A Microsoft chama isso vNext.

ATUALIZAÇÃO: Para o ASP.NET Core, a API da Web foi integrada ao tipo de projeto MVC 6 e a ApiControllerclasse é consolidada na Controllerclasse. Mais detalhes em: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6

Elad Lachmi
fonte
1
Obrigado Elad, entendi. Você pode editar e adicionar algo sobre o Asp.net Identity e o Web Api 2: apenas como eles serão usados ​​e como beneficiar. Apenas algumas palavras.
loop
Portanto, de forma alguma posso acessar uma ação do controlador no aplicativo dektop. mesmo se eu usar a sintaxe GET adequada para chamar o URL?
Inquebrável
70

Meus dois centavos...

  1. No ASP.Net MVC - o MVC Controllerdecide o que deve ser View- ou seja, o controlador decide o que o usuário deve "ver" (com base no cenário ou contexto atual), quando faz uma solicitação.
  2. No ASP.Net Web Forms , as ASPXpáginas decidem o que o usuário deve "ver" ao fazer uma solicitação.
  3. Porém, na API da Web , não há controle / poder sobre nenhum dos recursos da API da Web para decidir o que o usuário deve "ver" ao fazer uma solicitação.

A API da Web NÃO é uma tecnologia vinculada apenas a sites. Pode ser usado para vários propósitos - não apenas sites. Portanto, ele não sabe o significado derendering

Leitura adicional

  1. Planejando soluções Web hoje: formulários da Web, ASP.NET MVC, API da Web e OWIN.
  2. APIs da Web WCF ou ASP.NET? Meus dois centavos sobre o assunto
  3. A próxima geração do .NET - ASP.NET vNext
  4. Introdução ao ASP.NET MVC 6
LCJ
fonte
Não posso dizer pelos códigos comparados porque o WebAPI é mais legível. Além disso, parece que há algo invertido lá, pois é a API da Web a que se espera ter um atributo de método HTTP como [HttpGet]. Verifique algum código WebAPI (e WebAPI 2) aqui
Gobe
2
A resposta aceita declara "Basicamente, um controlador de API da Web é um controlador MVC". Isso é simplesmente errado. Sua resposta aponta que todo o PONTO da WebAPI é que ele não é MVC, NÃO precisa lidar com toda a bagagem e despesas gerais para lidar com "Visualizações" e "renderização". ... e os controladores WebApi nem precisam ser vinculados apenas a sites. Muito boa resposta - obrigado!
foggyday
0

Controlador MVC derivado da classe do controlador. No Mvc, você pode retornar visualizações. O Mvc Achitecture usa para criar um aplicativo. No entanto, as APIs da Web são usadas para fornecer dados para vários aplicativos.

A API da Web é dirigida pelo controlador da API e não retorna a visualização.

Nota: Você também pode criar API da Web a partir do controlador MVC, mas precisa retornar o resultado como JsonResult ou outros tipos de retorno suportados pela API da Web.

Akshay Kapoor
fonte
0

Além das respostas já fornecidas aqui, vale a pena notar qualquer controlador que herda de ApiController e ter uma ação com o verbo HTTP POST pode ter apenas um parâmetro de entrada [FromBody]. Se estiver usando um controlador MVC (derivado de 'Controller'), você poderá ter muitos parâmetros pós-entrada.

barrypicker
fonte