How to add Web API to an existing ASP.NET MVC 4 Web Application project?

asp.net Mvcasp.net Mvc-4asp.net Web-ApiVisual Studio-2012

asp.net Mvc Problem Overview


I wish to add an ASP.NET Web API to an ASP.NET MVC 4 Web Application project, developed in Visual Studio 2012. Which steps must I perform to add a functioning Web API to the project? I'm aware that I need a controller deriving from ApiController, but that's about all I know.

Let me know if I need to provide more details.

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

The steps I needed to perform were:

  1. Add reference to System.Web.Http.WebHost.
  2. Add App_Start\WebApiConfig.cs (see code snippet below).
  3. Import namespace System.Web.Http in Global.asax.cs.
  4. Call WebApiConfig.Register(GlobalConfiguration.Configuration) in MvcApplication.Application_Start() (in file Global.asax.cs), before registering the default Web Application route as that would otherwise take precedence.
  5. Add a controller deriving from System.Web.Http.ApiController.

I could then learn enough from the tutorial (Your First ASP.NET Web API) to define my API controller.

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);
}

Update 10.16.2015:

Word has it, the NuGet package Microsoft.AspNet.WebApi must be installed for the above to work.

Solution 2 - asp.net Mvc

UPDATE 11/22/2013 - this is the latest WebApi package:

Install-Package Microsoft.AspNet.WebApi

Original answer (this is an older WebApi package)

Install-Package AspNetWebApi

More details.

Solution 3 - asp.net Mvc

To add WebAPI in my MVC 5 project.

  1. Open NuGet Package manager console and run

     PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Add references to System.Web.Routing, System.Web.Net and System.Net.Http dlls if not there already

  3. Right click controllers folder > add new item > web > Add Web API controller

  4. Web.config will be modified accordingly by VS

  5. Add Application_Start method if not there already

     protected void Application_Start()
     {
         //this should be line #1 in this method
         GlobalConfiguration.Configure(WebApiConfig.Register);
     }
    
  6. Add the following class (I added in global.asax.cs file)

     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. Modify web api method accordingly

     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. Rebuild and test

  9. Build a simple html page

     <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>
    

Solution 4 - asp.net Mvc

As soon as you add a "WebApi Controller" under controllers folder, Visual Studio takes care of dependencies automatically;

> Visual Studio has added the full set of dependencies for ASP.NET Web > API 2 to project 'MyTestProject'. > > The Global.asax.cs file in the project may require additional changes > to enable ASP.NET Web API. > > 1. Add the following namespace references: > > using System.Web.Http; > using System.Web.Routing; > > 2. If the code does not already define an Application_Start method, add the following method: > > protected void Application_Start() > { > } > > 3. Add the following lines to the beginning of the Application_Start method: > > GlobalConfiguration.Configure(WebApiConfig.Register);

Solution 5 - asp.net Mvc

You can install from nuget as the the below image:

enter image description here

Or, run the below command line on Package Manager Console:

Install-Package Microsoft.AspNet.WebApi

Solution 6 - asp.net Mvc

Before you start merging MVC and Web API projects I would suggest to read about https://stackoverflow.com/questions/12905566/web-api-in-mvc-solution-in-separate-project">cons and pros to separate these as different projects. One very important thing (my own) is authentication systems, which is totally different.

IF you need to use authenticated requests on both MVC and Web API, you need to remember that Web API is RESTful (don't need to keep session, simple HTTP requests, etc.), but MVC is not.

To look on the differences of implementations simply create 2 different projects in Visual Studio 2013 from Templates: one for MVC and one for Web API (don't forget to turn On "Individual Authentication" during creation). You will see a lot of difference in AuthencationControllers.

So, be aware.

Solution 7 - asp.net Mvc

NOTE : this is just an abbreviation of this answer above

  1. Open NuGet Package manager console and run

     PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Add references to System.Web.Routing, System.Web.Net and System.Net.Http dlls if not there already

  3. Add the following class

     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. Add Application_Start method if not there already (in global.asax.cs file)

     protected void Application_Start()
     {
         //this should be line #1 in this method
         GlobalConfiguration.Configure(WebApiConfig.Register);
     }
    
  5. Right click controllers folder > add new item > web > Add Web API controller

     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";
             }  
         }
     }
    

Solution 8 - asp.net Mvc

The above solution works perfectly. I prefer to choose Web API option while selecting the project template as shown in the picture below

Note: The solution works with Visual Studio 2013 or higher. The original question was asked in 2012 and it is 2016, therefore adding a solution Visual Studio 2013 or higher.

Project template showing web API option

Solution 9 - asp.net Mvc

I had same problem, the solution was so easy

Right click on solotion install Microsoft.ASP.NET.WebApi from "Manage Nuget Package for Sulotion"

boom that's it ;)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionaknuds1View Question on Stackoverflow
Solution 1 - asp.net Mvcaknuds1View Answer on Stackoverflow
Solution 2 - asp.net MvccdeutschView Answer on Stackoverflow
Solution 3 - asp.net MvckheyaView Answer on Stackoverflow
Solution 4 - asp.net MvcTeoman shipahiView Answer on Stackoverflow
Solution 5 - asp.net MvccuongleView Answer on Stackoverflow
Solution 6 - asp.net MvcYarkov AntonView Answer on Stackoverflow
Solution 7 - asp.net MvcHakan FıstıkView Answer on Stackoverflow
Solution 8 - asp.net MvcSankar KrishnamoorthyView Answer on Stackoverflow
Solution 9 - asp.net MvciDeveloperView Answer on Stackoverflow