asp.net-mvc - web开发 - web api是什么
如何将Web API添加到现有的ASP.NET MVC 4 Web应用程序项目? (5)
UPDATE 11/22/2013 - 这是最新的WebApi软件包:
Install-Package Microsoft.AspNet.WebApi
原始答案(这是一个较旧的WebApi包)
Install-Package AspNetWebApi
更多details 。
我希望将ASP.NET Web API添加到在Visual Studio 2012中开发的ASP.NET MVC 4 Web应用程序项目中。我必须执行哪些步骤才能将正常运行的Web API添加到项目中? 我知道我需要一个派生自ApiController的控制器,但这就是我所知道的。
让我知道是否需要提供更多细节。
在我的MVC 5项目中添加WebAPI。
打开NuGet程序包管理器并运行
PM> Install-Package Microsoft.AspNet.WebApi
如果不存在,请添加对System.Web.Routing,System.Web.Net和System.Net.Http dll的引用
右键单击控制器文件夹>添加新项目> Web>添加Web API控制器
Web.config将相应地由VS进行修改
如果不存在,添加Application_Start(){}方法
protected void Application_Start() { //this should be line #1 in this method GlobalConfiguration.Configure(WebApiConfig.Register); }
添加以下类(我添加在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 } ); } }
相应地修改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(); } } }
重建和测试
建立一个简单的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>
只要在controllers文件夹下添加“WebApi控制器”,Visual Studio就会自动处理依赖关系;
Visual Studio已经添加了ASP.NET Web API 2的全套依赖项目来投影'MyTestProject'。
项目中的Global.asax.cs文件可能需要进行其他更改才能启用ASP.NET Web API。
添加下列名称空间参考:
使用System.Web.Http; 使用System.Web.Routing;
如果代码尚未定义Application_Start方法,请添加以下方法:
protected void Application_Start(){}
将以下行添加到Application_Start方法的开头:
GlobalConfiguration.Configure(WebApiConfig.Register);
在开始合并MVC和Web API项目之前,我建议阅读有关cons和专业人士将它们分解为不同的项目。 一个非常重要的事情(我自己的)是认证系统,这是完全不同的。
如果您需要在MVC和Web API上使用经过身份验证的请求,则需要记住Web API是RESTful(不需要保留会话,简单HTTP请求等),但是MVC不是。
要查看实现的差异,只需在模板中创建Visual Studio 2013中的两个不同项目:一个用于MVC,另一个用于Web API(不要忘记在创建期间打开“个人身份验证”)。 您会在AuthencationControllers中看到很多不同之处。
所以,请注意。
我需要执行的步骤是:
- 添加对
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控制器。
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才能正常工作。