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

akn*_*ds1 361 asp.net-mvc asp.net-mvc-4 asp.net-web-api visual-studio-2012

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

如果我需要提供更多详细信息,请与我们联系.

akn*_*ds1 447

我需要执行的步骤是:

  1. 添加引用System.Web.Http.WebHost.
  2. 添加App_Start\WebApiConfig.cs(请参阅下面的代码段).
  3. 导入命名空间System.Web.HttpGlobal.asax.cs.
  4. 通话WebApiConfig.Register(GlobalConfiguration.Configuration)MvcApplication.Application_Start()(文件Global.asax.cs),之前注册的默认Web应用程序的路线为,否则将优先.
  5. 添加一个派生自的控制器System.Web.Http.ApiController.

然后,我可以从教程(您的第一个ASP.NET Web API)中学到足够的知识来定义我的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 });
    }
}
Run Code Online (Sandbox Code Playgroud)

的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);
}
Run Code Online (Sandbox Code Playgroud)

更新10.16.2015:

Word有它,必须安装NuGet包Microsoft.AspNet.WebApi才能使上述工作正常.

  • 这真的很有帮助.我不得不添加对`System.Net.Http`的引用,但除此之外,它就像一个魅力! (12认同)
  • 我将项目从MVC3升级到4,还需要添加对System.Web.Http的引用. (5认同)
  • 您现在可以使用nuget,并随时了解所发生的任何变化!https://www.nuget.org/packages/Microsoft.AspNet.WebApi (3认同)
  • @LuisGouveia我想这是迟到的,但如果这就是我的话,其他人可能会更快解决它.GlobalConfiguration.Configure(WebApiConfig.Register); 在Global.asax中,在RouteConfig.RegisterRoutes(RouteTable.Routes)之前; (3认同)
  • 在我将web api寄存器更改为:GlobalConfiguration.Configure(WebApiConfig.Register)之前,我不会让它工作. (2认同)
  • 我还需要GlobalConfiguration.Configuration.EnsureInitialized(); 在我的全球性asax的最后 (2认同)

cde*_*sch 76

更新2013年11月22日 - 这是最新的WebApi包:

Install-Package Microsoft.AspNet.WebApi
Run Code Online (Sandbox Code Playgroud)

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

Install-Package AspNetWebApi
Run Code Online (Sandbox Code Playgroud)

更多细节.

  • 截至2013年,这是一个遗留包,你现在想要"安装 - 包装Microsoft.AspNet.WebApi".请参阅https://www.nuget.org/packages/Microsoft.AspNet.WebApi (3认同)

khe*_*eya 64

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

  1. 打开NuGet包管理器consol并运行

    PM> Install-Package Microsoft.AspNet.WebApi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加对System.Web.Routing,System.Web.Net和System.Net.Http dlls的引用,如果不存在的话

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

  4. VS.将相应地修改Web.config

  5. 如果没有,则添加Application_Start(){}方法

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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 }
             );
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  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();
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

  • 正如@kheya 所提到的,产生差异的一点是将 WebApiconfig.Register 放在第一行 (2认同)

Teo*_*ahi 27

只要在控制器文件夹下添加"WebApi Controller",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方法,请添加以下方法:

    protected void Application_Start(){}

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

    GlobalConfiguration.Configure(WebApiConfig.Register);

  • 当你有vs2015 - 更新3并添加web api 2控制器时,这是正确的答案. (2认同)

cuo*_*gle 22

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

在此输入图像描述

或者,在Package Manager控制台上运行以下命令行:

Install-Package Microsoft.AspNet.WebApi
Run Code Online (Sandbox Code Playgroud)

  • 那么,除了添加控制器之外还需要做什么呢?这就是为什么我首先发布这个问题,教程并没有真正说明,因为它假定一个Web API项目.我添加了一个API控制器,但它没有路由到. (3认同)

小智 20

在开始合并MVC和Web API项目之前,我建议您阅读cons和pros将这些项目分开作为不同的项目.一个非常重要的事情(我自己)是身份验证系统,它完全不同.

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

要查看实现的差异,只需在模板中在Visual Studio 2013中创建2个不同的项目:一个用于MVC,另一个用于Web API(不要忘记在创建期间打开"个人身份验证").您将在AuthencationControllers中看到很多不同之处.

所以,请注意.


Hak*_*tık 6

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

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

    PM> Install-Package Microsoft.AspNet.WebApi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 加入引用System.Web.RoutingSystem.Web.NetSystem.Net.Http如果已经不存在的DLL

  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 }
             );
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  4. Application_Start如果尚不存在,请添加方法(在global.asax.cs文件中)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 右键单击controllers文件夹>添加新项> 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";
            }  
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)