将Web API添加到现有的MVC Web应用程序后发生404错误

这里有一个很好的问题: 如何将Web API添加到现有的ASP.NET MVC 4 Web应用程序项目中?

不幸的是,这是不足以解决我的问题。 我已经试了两次,以确保我没有做错任何事情。 我右键单击“控制器”,添加项目“Web API 2控制器与动作,使用entity framework”,我select我的模型类和数据库上下文。 一切都很好…但仍然…每次我试图访问/ api /rest我得到一个404错误(我的控制器的名字是RestController)。

它正在工作! 我不想相信,但猜猜是什么,问题与Global.asax路由顺序有关

虽然它不适用于:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th BundleConfig.RegisterBundles(BundleTable.Bundles); } 

它适用于:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } 

疯狂,我知道。

如果您想在现有MVC(5)项目中使用WebAPI,则必须执行以下步骤:
1.添加WebApi包:

 Microsoft.AspNet.WebApi Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Core Microsoft.AspNet.WebApi.WebHost Newtonsoft.Json 

WebApiConfig.cs文件添加到App_Start文件夹中:

 using System.Web.Http; namespace WebApiTest { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 

Glabal.asax下行添加到Glabal.asax

 GlobalConfiguration.Configure(WebApiConfig.Register); 

重要提示:您必须在AreaRegistration.RegisterAllAreas();后面添加上面的行AreaRegistration.RegisterAllAreas();

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); //\\ GlobalConfiguration.Configure(WebApiConfig.Register); //\\ FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } 

“在添加新路线时,请始终保持注意,您必须在顶部添加特定路线,最后添加更多通用路线,否则,您的networking应用程序将永远不会收到正确的路线。

以上是从这里引用: http : //www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC

我知道答案已经给出,但这可能有助于理解为什么我们需要把GlobalConfiguration.Configure(WebApiConfig.Register); 在RouteConfig.RegisterRoutes(RouteTable.Routes)之前;