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派生的控制器,但这就是我所知道的。
如果需要提供更多详细信息,请通知我。
我需要执行的步骤是:
然后,我可以从教程(您的第一个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 |
添加对
右键单击控制器文件夹>添加新项目>Web>添加Web API控制器
web.config将根据vs进行相应修改
如果还没有添加
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安装,如下图所示:
或者,在包管理器控制台上运行以下命令行:
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 |
添加对
添加以下类
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 } ); } } |
如果还没有添加
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或更高版本。
我也有同样的问题,解决方法很简单
右击Solotion从"Manage Nuget Package for Sulotion"安装Microsoft.asp.net.WebAPI
就这样吧;)