如何将Web API添加到现有的ASP.NET MVC 4 Web应用程序项目?

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

我希望将ASP.NET Web API添加到在Visual Studio 2012中开发的ASP.NET MVC 4 Web应用程序项目中。我必须执行哪些步骤才能向项目添加功能正常的Web API?我知道我需要一个从apicontroller派生的控制器,但这就是我所知道的。

如果需要提供更多详细信息,请通知我。


我需要执行的步骤是:

  • 添加对System.Web.Http.WebHost的引用。
  • 添加App_Start\WebApiConfig.cs(参见下面的代码段)。
  • Global.asax.cs中导入命名空间System.Web.Http
  • 在注册默认的Web应用程序路由之前,在MvcApplication.Application_Start()中(在文件Global.asax.cs中)调用WebApiConfig.Register(GlobalConfiguration.Configuration),否则将优先。
  • 增加从System.Web.Http.ApiController派生的控制器。
  • 然后,我可以从教程(您的第一个ASP.NET Web API)学到足够的知识来定义我的API控制器。

    应用程序webapiconfig.cs:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    using System.Web.Http;

    ...

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

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

    更新时间:2015年10月16日:

    在Word中,必须安装nuget包microsoft.aspnet.webapi才能使上述软件正常工作。


    更新11/22/2013-这是最新的WebAPI包:

    1
    Install-Package Microsoft.AspNet.WebApi

    原始答案(这是一个较旧的WebAPI包)

    1
    Install-Package AspNetWebApi

    更多细节。


    在我的MVC 5项目中添加WebAPI。

  • 打开Nuget Package Manager控制台并运行

    1
    PM> Install-Package Microsoft.AspNet.WebApi
  • 添加对System.Web.RoutingSystem.Web.NetSystem.Net.Httpdll的引用(如果还没有)

  • 右键单击控制器文件夹>添加新项目>Web>添加Web API控制器

  • web.config将根据vs进行相应修改

  • 如果还没有添加Application_Start方法

    1
    2
    3
    4
    5
    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  • 添加以下类(我添加在global.asax.cs文件中)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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 }
             );
         }
     }
  • 相应地修改Web API方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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();
            }
        }
    }
  • 重建和测试

  • 构建一个简单的HTML页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
           
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js">
        <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);
                    }
                });
            });
       
    </head>
    <body>
    ....
    </body>
    </html>

  • 只要在Controllers文件夹下添加一个"WebAPI控制器",Visual Studio就会自动处理依赖关系;

    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.

  • Add the following namespace references:

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

  • If the code does not already define an Application_Start method, add the following method:

    protected void Application_Start()
    {
    }

  • Add the following lines to the beginning of the Application_Start method:

    GlobalConfiguration.Configure(WebApiConfig.Register);


  • 您可以从nuget安装,如下图所示:

    enter image description here

    或者,在包管理器控制台上运行以下命令行:

    1
    Install-Package Microsoft.AspNet.WebApi


    在您开始合并MVC和Web API项目之前,我建议您先阅读一下缺点和优点,将它们作为不同的项目进行分离。一件非常重要的事情(我自己的)是认证系统,这是完全不同的。

    如果需要在MVC和Web API上使用经过身份验证的请求,则需要记住Web API是RESTful(不需要保留会话、简单HTTP请求等),但MVC不是。

    要了解实现的差异,只需在Visual Studio 2013中使用模板创建两个不同的项目:一个用于MVC,另一个用于Web API(不要忘记在创建过程中打开"单个身份验证")。在authencationcontrollers中,您会看到很多不同之处。

    所以,要注意。


    注:这只是上述答案的缩写。

  • 打开Nuget Package Manager控制台并运行

    1
    PM> Install-Package Microsoft.AspNet.WebApi
  • 添加对System.Web.RoutingSystem.Web.NetSystem.Net.Httpdll的引用(如果还没有)

  • 添加以下类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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 }
             );
         }
     }
  • 如果还没有添加Application_Start方法(在global.asax.cs文件中)

    1
    2
    3
    4
    5
    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  • 右键单击控制器文件夹>添加新项目>Web>添加Web API控制器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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";
            }  
        }
    }

  • 上述解决方案完全有效。我更喜欢在选择项目模板时选择Web API选项,如下图所示

    注意:该解决方案适用于Visual Studio 2013或更高版本。最初的问题是在2012年提出的,现在是2016年,因此添加了一个解决方案Visual Studio 2013或更高版本。

    Project template showing web API option


    我也有同样的问题,解决方法很简单

    右击Solotion从"Manage Nuget Package for Sulotion"安装Microsoft.asp.net.WebAPI

    就这样吧;)