我希望将ASP.NET Web API添加到在 Visual Studio 2012 中开发的 ASP.NET MVC 4 Web 应用程序项目中。我必须执行哪些步骤才能将功能正常的 Web API 添加到项目中?我知道我需要一个从 ApiController 派生的控制器,但这就是我所知道的。
如果我需要提供更多详细信息,请告诉我。
我希望将ASP.NET Web API添加到在 Visual Studio 2012 中开发的 ASP.NET MVC 4 Web 应用程序项目中。我必须执行哪些步骤才能将功能正常的 Web API 添加到项目中?我知道我需要一个从 ApiController 派生的控制器,但这就是我所知道的。
如果我需要提供更多详细信息,请告诉我。
The steps I needed to perform were:
System.Web.Http.WebHost
.App_Start\WebApiConfig.cs
(see code snippet below).System.Web.Http
in Global.asax.cs
.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.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.
更新 11/22/2013 - 这是最新的 WebApi 包:
Install-Package Microsoft.AspNet.WebApi
原始答案(这是一个较旧的 WebApi 包)
Install-Package AspNetWebApi
更多细节。
在我的 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>
只要在控制器文件夹下添加“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 方法,请添加以下方法:
受保护的无效应用程序启动(){}
将以下行添加到 Application_Start 方法的开头:
GlobalConfiguration.Configure(WebApiConfig.Register);
您可以从 nuget 安装,如下图所示:
或者,在包管理器控制台上运行以下命令行:
Install-Package Microsoft.AspNet.WebApi
在开始合并 MVC 和 Web API 项目之前,我建议阅读有关利弊的信息,以将它们分开为不同的项目。一件非常重要的事情(我自己的)是身份验证系统,这是完全不同的。
如果您需要在 MVC 和 Web API 上使用经过身份验证的请求,您需要记住 Web API 是 RESTful(不需要保持会话、简单的 HTTP 请求等),但 MVC 不是。
要查看实现的差异,只需在 Visual Studio 2013 中从模板创建 2 个不同的项目:一个用于 MVC,一个用于 Web API(不要忘记在创建过程中打开“个人身份验证”)。你会在 AuthencationControllers 中看到很多不同。
所以,请注意。
注意:这只是上面这个答案的缩写
打开 NuGet 包管理器控制台并运行
PM> Install-Package Microsoft.AspNet.WebApi
添加对System.Web.Routing
,System.Web.Net
和System.Net.Http
dll 的引用(如果还没有的话)
添加以下类
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 }
);
}
}
Application_Start
如果还没有添加方法(在 global.asax.cs 文件中)
protected void Application_Start()
{
//this should be line #1 in this method
GlobalConfiguration.Configure(WebApiConfig.Register);
}
右键单击控制器文件夹 > 添加新项目 > 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";
}
}
}
我有同样的问题,解决方法很简单
右键单击从“管理 Sulotion 的 Nuget 包”中安装 Microsoft.ASP.NET.WebApi 的 solotion
繁荣就是这样;)