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

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

如果我需要提供更多细节,请告诉我。

233100 次浏览

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

enter image description here

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

Install-Package Microsoft.AspNet.WebApi

我需要执行的步骤是:

  1. 添加System.Web.Http.WebHost引用。
  2. 添加App_Start\WebApiConfig.cs(参见下面的代码片段)。
  3. Global.asax.cs中导入命名空间System.Web.Http
  4. 调用MvcApplication.Application_Start()中的WebApiConfig.Register(GlobalConfiguration.Configuration)(在文件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 });
}
}

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

更新10.16.2015:

Word有它,NuGet包Microsoft.AspNet.WebApi必须安装以上工作。

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

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

更多的细节

在你开始合并MVC和Web API项目之前,我建议你先阅读利弊,把它们作为不同的项目分开。一个非常重要的事情(我自己的)是认证系统,这是完全不同的。

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

要查看实现的差异,只需在Visual Studio 2013中从模板创建2个不同的项目:一个用于MVC,一个用于Web API(不要忘记在创建过程中打开“个人认证”)。您将在authenticationcontrollers中看到许多不同之处。

所以,要注意。

只要你在controllers文件夹下添加了一个“WebApi Controller”,Visual Studio就会自动处理依赖关系;

Visual Studio已经为ASP添加了完整的依赖项集。网网络 API 2项目“MyTestProject”。< / p > 项目中的Global.asax.cs文件可能需要额外的更改 启用ASP。

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

    使用System.Web.Http < p >; 李使用System.Web.Routing; < / p > < / >
  2. 如果代码没有定义Application_Start方法,则添加以下方法:

    protected void Application_Start() { 李}< / p > < / >

  3. 在Application_Start方法的开头添加以下几行:

    GlobalConfiguration.Configure (WebApiConfig.Register); < / p >

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

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

    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>
    

上述解决方案非常有效。如下图所示,我在选择项目模板时更倾向于选择Web API选项

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

项目模板显示web API选项

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

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

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

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

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

就是这样;)