asp.net-mvc - tutorial - webapi 2 return json




Como adicionar a API da Web a um projeto existente do ASP.NET MVC 4 Web Application? (6)

A solução acima funciona perfeitamente. Eu prefiro escolher a opção API da Web ao selecionar o modelo do projeto conforme mostrado na figura abaixo

Nota: A solução funciona com o Visual Studio 2013 ou superior. A pergunta original foi feita em 2012 e é 2016, portanto, adicionando uma solução Visual Studio 2013 ou superior.

Desejo adicionar uma API da Web do ASP.NET a um projeto de aplicativo da Web do ASP.NET MVC 4, desenvolvido no Visual Studio 2012. Quais etapas devo executar para adicionar uma API da Web funcional ao projeto? Estou ciente de que preciso de um controlador derivado do ApiController, mas isso é tudo que sei.

Deixe-me saber se preciso fornecer mais detalhes.


ATUALIZAÇÃO 22/11/2013 - este é o pacote WebApi mais recente:

Install-Package Microsoft.AspNet.WebApi

Resposta original (este é um pacote WebApi mais antigo)

Install-Package AspNetWebApi

Mais details .


Assim que você adiciona um "Controlador WebApi" na pasta Controladores, o Visual Studio cuida das dependências automaticamente;

Visual Studio adicionou o conjunto completo de dependências para ASP.NET Web API 2 para projetar 'MyTestProject'.

O arquivo Global.asax.cs no projeto pode exigir alterações adicionais para habilitar a API da Web do ASP.NET.

  1. Adicione as seguintes referências de namespace:

    using System.Web.Http; using System.Web.Routing;

  2. Se o código ainda não definir um método Application_Start, adicione o seguinte método:

    void protegido Application_Start () {}

  3. Adicione as seguintes linhas ao início do método Application_Start:

    GlobalConfiguration.Configure (WebApiConfig.Register);


Os passos que eu precisava realizar eram:

  1. Adicione referência a System.Web.Http.WebHost .
  2. Adicione App_Start\WebApiConfig.cs (consulte o snippet de código abaixo).
  3. Importe o namespace System.Web.Http em Global.asax.cs .
  4. Chame WebApiConfig.Register(GlobalConfiguration.Configuration) em MvcApplication.Application_Start() (no arquivo Global.asax.cs ), antes de registrar a rota padrão do Aplicativo da Web, pois isso teria precedência.
  5. Adicione um controlador derivado de System.Web.Http.ApiController .

Eu poderia aprender o suficiente do tutorial (sua primeira API da Web do asp.net) para definir o meu controlador de API.

App_Start \ WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Atualização de 16/10/2015:

O Word tem, o pacote NuGet Microsoft.AspNet.WebApi deve ser instalado para o acima para funcionar.


NOTA: esta é apenas uma abreviação desta resposta acima

  1. Abra o console do gerenciador de pacotes NuGet e execute

    PM> Install-Package Microsoft.AspNet.WebApi
  2. Adicione referências a dlls System.Web.Routing , System.Web.Net e System.Net.Http se já não existir

  3. Adicione a seguinte classe

    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 }
             );
         }
     }
  4. Adicione o método Application_Start se não estiver lá (no arquivo global.asax.cs)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. Clique com o botão direito do mouse na pasta controllers> adicionar novo item> web> Adicionar controlador da API da Web

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }  
        }
    }

Para adicionar o WebAPI no meu projeto MVC 5.

  1. Abra o console do gerenciador de pacotes NuGet e execute

    PM> Install-Package Microsoft.AspNet.WebApi
  2. Adicione referências a dlls System.Web.Routing , System.Web.Net e System.Net.Http se já não existir

  3. Clique com o botão direito do mouse na pasta controllers> adicionar novo item> web> Adicionar controlador da API da Web

  4. Web.config será modificado de acordo com o VS

  5. Adicione o método Application_Start , se já não existe

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. Adicione a seguinte classe (eu adicionei no arquivo global.asax.cs)

    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 }
             );
         }
     }
  7. Modifique o método da API da web de acordo

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
  8. Reconstruir e testar

  9. Construa uma simples página html

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>    
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script>
        <script type="text/javascript">
            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('got: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('seccess1');
                        var res = parseInt(data);
                        alert('got res=' + res);
                    }
                });
            });
        </script>
    </head>
    <body>
    ....
    </body>
    </html>




visual-studio-2012