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

时间:2014-03-14 09:48:46

标签: c# asp.net asp.net-mvc rest asp.net-web-api

这里有一个很棒的问题: How to add Web API to an existing ASP.NET MVC 4 Web Application project?

不幸的是,它不足以解决我的问题。我已经尝试了两次,以确保我没有做错任何事。我右键点击了#34;控制器"并使用Entity Framework"添加了带有操作的项目" Web API 2 Controller;我选择了我的模型类和数据库上下文。一切都很顺利......但是......每次我都试图访问/ api / Rest我得到404错误(我的控制器的名称是RestController)。

3 个答案:

答案 0 :(得分:118)

它正在工作!我不想相信,但猜猜是什么,问题与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);
}      

疯了,我知道。

答案 1 :(得分:3)

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

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

2.将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 }
            );
        }
    }
}

3.将以下行添加到Glabal.asax

GlobalConfiguration.Configure(WebApiConfig.Register);

重要说明:您必须在AreaRegistration.RegisterAllAreas();

之后准确添加以上行
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    //\\
    GlobalConfiguration.Configure(WebApiConfig.Register);
    //\\
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

答案 2 :(得分:2)

“添加新路线时始终保持心态,您必须在顶部添加特定路线,然后在最后添加更通用的路线。否则,您的网络应用将永远无法获得正确的路由。”

以上是此处的引文: http://www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC

我知道已经给出了答案,但这有助于理解我们需要提出的原因 GlobalConfiguration.Configure(WebApiConfig.Register); 之前 RouteConfig.RegisterRoutes(RouteTable.Routes);