Estou construindo um aplicativo ASP.NET MVC que é pesado para scripts de cliente, ele usará JSON e jQuery para manipular o DOM.
Meu entendimento é que o Web API Controller e o MVC Controller podem retornar JSON.
Dado o meu cenário, devo usar um Web API Controller ou um MVC Controller ?
json
asp.net-mvc
asp.net-web-api
Nil Pun
fonte
fonte
Respostas:
Os controladores de API da Web podem ser criados e hospedados em qualquer aplicativo ASP.NET, não apenas nos aplicativos MVC. Portanto, um motivo óbvio para criar uma API da Web é se você não possui um front-end MVC (por exemplo, serviços da Web RESTful clássicos hospedados por sua empresa / organização).
Os MVC Controllers geralmente contam com o MVC Framework, se você observar os modelos padrão e a maior parte do trabalho realizado pela comunidade e seus colegas, perceberá que quase todos os MVC Controllers são implementados com a Visualização em mente.
Pessoalmente, uso Controladores MVC quando pretendo responder com uma View () e usarei uma API da Web para qualquer coisa que não dependa de uma exibição específica.
Existem advertências, é claro, mas de um modo geral, se você não exige o comportamento de Model Binding do MVC, seu serviço é centrado em dados e as operações são centradas em dados (por exemplo, operações CRUD), é provável que você queira um 'Web API Controller 'em vez de um' Model-View Controller '. Por outro lado, se suas operações são centradas na visualização (por exemplo, entregar uma página de administração do usuário ao usuário) ou você precisa da Ligação de modelo do MVC para gerar 'parciais de ajax' (muito improvável), será necessário um Controlador MVC.
Pessoalmente, uso controladores de API da Web para direcionar clientes RESTful baseados em JSON, uso controladores MVC para lidar com o roteamento básico do navegador e a entrega do SPA.
fonte
WebAPI é para fazer uma API. Se você deseja que alguém consuma sua API em XML, JSON etc. Você pode criar uma API da Web.
No seu caso, você só precisa conversar com o cliente em JSON.
Mesmo que seu site seja principalmente orientado por scripts de cliente, você ainda estaria usando o ASP.NET MVC Controller, certo? E como você já pode ter dividido logicamente seus controladores com base em entidades, faz sentido adicionar esses métodos de serviço json nele, em vez de criar outra classe especificamente para API da Web.
Portanto, para sua situação específica (se bem entendi), eu ficaria com os Controladores.
fonte
A resposta se resume à separação de preocupações, agiliza a criação de serviços e depende da convenção e não da configuração.
A principal responsabilidade dos controladores é trabalhar como coordenador entre a visualização e o seu modelo, mas onde a principal responsabilidade da API é trabalhar com dados. No caso das convenções da API, é realmente fácil executar operações CRUD. Abaixo está o mapeamento entre a operação CRUD e as ações HTTP
Portanto, com as APIs, você não precisa criar ações separadas e atribuí-las a ações HTTP.
fonte
A única preocupação que tenho com o ApiController é que ele é baseado no site e não na área. Um site pode ter apenas uma subpasta apicontroller para você nomear seus métodos de controlador. Há situações em que você pode duplicar o nome do controlador em diferentes áreas:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
Lembro que existem algumas configurações de código personalizadas para fazer isso, mas ele não funciona por padrão.
fonte
Concordo com a resposta (resposta principal) de Shaun Wilson, mas não sei por que, como estou um pouco confuso e ainda estou tentando entender com a seguinte premonição (provavelmente incorreta):
Veja bem, eu simplesmente não sei como estou incorreto aqui e estou confuso porque a última linha da resposta de Shaun declara "Eu uso controladores MVC para lidar com o roteamento básico do navegador e a entrega do SPA". - talvez eu não saiba completamente o que é um cliente tranqüilo quando presumi que poderia ser o método JavaScript que recebe uma resposta no formato JSON. esta é a postagem mais próxima do Stackoverflow que foi remotamente relacionada como resposta à minha pergunta, por isso estou respondendo a essa postagem em vez de possivelmente duplicar perguntas.
fonte
Nesse cenário, eu recomendaria o WebApi, pois é perfeito para transferir dados como esse com base em solicitações de Javascript. Normalmente, desenvolverei meus controladores WebApi para que eles retornem um objeto amigável para JSON que possa ser analisado facilmente pelo meu Javascript.
O único tempo real em que você desejaria usar uma ação em um controlador MVC para esse tipo de coisa seria se você desejasse gerar algum HTML e substituir segmentos da sua página por chamadas Javascript.
Por exemplo:
Você tem um Datepicker da UI do JQuery que, após a seleção, gera uma lista de botões de opção que representam eventos no dia escolhido.
Nesse cenário, você pode usar o WebApi para retornar algum JSON e, em seguida, gerar o HTML necessário usando Javascript, mas geralmente é uma prática inadequada criar muito HTML usando Javascript. Seria muito melhor que o C # construísse o HTML e depois o retornasse através de uma exibição parcial, pois dessa forma é menos provável que você encontre erros na análise do Javascript. Sem mencionar que torna o HTML muito mais fácil de escrever.
fonte