371

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

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

4

9 回答 9

471

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.

于 2012-08-17T07:33:40.013 回答
81

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

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

更多细节

于 2013-02-14T20:23:06.263 回答
79

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

  1. 打开 NuGet 包管理器控制台并运行

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. 添加对System.Web.Routing,System.Web.NetSystem.Net.Httpdll 的引用(如果还没有的话)

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

  4. Web.config 会被 VS 相应修改

  5. Application_Start如果还没有,请添加方法

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  6. 添加以下类(我在 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. 相应地修改 web api 方法

    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. 重建和测试

  9. 构建一个简单的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>
    
于 2015-12-10T06:03:27.260 回答
29

只要在控制器文件夹下添加“WebApi 控制器”,Visual Studio 就会自动处理依赖关系;

Visual Studio 已将 ASP.NET Web API 2 的全套依赖项添加到项目“MyTestProject”。

项目中的 Global.asax.cs 文件可能需要进行其他更改才能启用 ASP.NET Web API。

  1. 添加以下命名空间引用:

    使用 System.Web.Http;使用 System.Web.Routing;

  2. 如果代码尚未定义 Application_Start 方法,请添加以下方法:

    受保护的无效应用程序启动(){}

  3. 将以下行添加到 Application_Start 方法的开头:

    GlobalConfiguration.Configure(WebApiConfig.Register);

于 2014-07-22T05:13:11.997 回答
22

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

在此处输入图像描述

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

Install-Package Microsoft.AspNet.WebApi
于 2012-08-16T15:25:47.083 回答
21

在开始合并 MVC 和 Web API 项目之前,我建议阅读有关利弊的信息,以将它们分开为不同的项目。一件非常重要的事情(我自己的)是身份验证系统,这是完全不同的。

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

要查看实现的差异,只需在 Visual Studio 2013 中从模板创建 2 个不同的项目:一个用于 MVC,一个用于 Web API(不要忘记在创建过程中打开“个人身份验证”)。你会在 AuthencationControllers 中看到很多不同。

所以,请注意。

于 2014-06-29T20:30:28.983 回答
13

注意:这只是上面这个答案的缩写

  1. 打开 NuGet 包管理器控制台并运行

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. 添加对System.Web.Routing,System.Web.NetSystem.Net.Httpdll 的引用(如果还没有的话)

  3. 添加以下类

    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. Application_Start如果还没有添加方法(在 global.asax.cs 文件中)

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

    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";
            }  
        }
    }
    
于 2019-03-05T11:44:54.243 回答
3

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

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

显示 Web API 选项的项目模板

于 2016-04-21T14:29:12.323 回答
1

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

右键单击从“管理 Sulotion 的 Nuget 包”中安装 Microsoft.ASP.NET.WebApi 的 solotion

繁荣就是这样;)

于 2019-05-22T06:28:50.103 回答