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

本文关键字:Web 错误 应用程序 API 添加 MVC | 更新日期: 2023-09-27 17:50:10

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

不幸的是,这不足以解决我的问题。我已经试了两次,以确保我没有做错任何事。我右键单击"控制器",并添加项目"Web API 2控制器与动作,使用实体框架",我选择了我的模型类和数据库上下文。一切都很顺利……但仍…每次我试图访问/api/Rest我得到一个404错误(我的控制器的名称是RestController)。

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

成功了!我不愿相信,但你猜怎么着,这个问题与环球酒店有关。asax routing order.

但不能使用:

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

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);
}

"当添加新的路由时,一定要记住,你必须在顶部添加特定的路由,然后在最后添加更通用的路由。否则,你的web应用将永远不会收到正确的路由。"

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

我知道答案已经给出了,但是这可以帮助我们理解为什么我们需要放置GlobalConfiguration.Configure (WebApiConfig.Register);之前RouteConfig.RegisterRoutes (RouteTable.Routes);