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

C# 404将Web API添加到现有MVC Web应用程序后出错,c#,asp.net,asp.net-mvc,rest,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Rest,Asp.net Web Api,这里有一个很好的问题: 不幸的是,这还不足以解决我的问题。我已经试过两次确保我没有做错任何事。我右键单击“控制器”,并添加了项目“WebAPI2controllerwithactions,usingentityframework”,在这里我选择了我的模型类和db上下文。一切都很好。。。但还是。。。每次尝试访问/api/Rest时,我都会遇到404错误(我的控制器名为RestController)。它正在工作!!!我不想相信,但猜猜看,问题与Global.asax路由顺序有关 虽然它不适用于: p

这里有一个很好的问题:


不幸的是,这还不足以解决我的问题。我已经试过两次确保我没有做错任何事。我右键单击“控制器”,并添加了项目“WebAPI2controllerwithactions,usingentityframework”,在这里我选择了我的模型类和db上下文。一切都很好。。。但还是。。。每次尝试访问/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);
}      
疯狂,我知道。

“添加新路由时,请始终记住,您必须在顶部添加特定路由,然后在最后添加更通用的路由。否则,您的web应用程序将永远无法收到正确的路由。”

以上是此处的引文:

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

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

Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json
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 }
            );
        }
    }
}
GlobalConfiguration.Configure(WebApiConfig.Register);
2.将
WebApiConfig.cs
文件添加到
App\u Start
文件夹:

Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json
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 }
            );
        }
    }
}
GlobalConfiguration.Configure(WebApiConfig.Register);
3.将以下行添加到
Glabal.asax

Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json
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 }
            );
        }
    }
}
GlobalConfiguration.Configure(WebApiConfig.Register);
重要提示:您必须在
AreaRegistration.RegisteralAreas()之后添加上述行


请参阅此链接
http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2
@Jegadeesh,thks,我查一下it@Jegadeesh,提供的链接向我解释了我应该更改WebApiConfig.Register(GlobalConfiguration.Configuration);配置(WebApiConfig.Register);但不幸的是这还不够。。。thks THOUGHT您可以粘贴应用程序中的内容吗\u Start/WebApiConfig.cs?您的路由文件应该在这里。@Jegadeesh链接已断开。在以下位置找到类似的内容:api路由必须首先求值,或者您需要创建更严格的mvc路由(这样框架就不会尝试查找“ApiController”)。这不是MVC5特定的行为。在永远搜索之后,我找到了这个gem。快速简单的修复。谢谢这是正确的顺序,您必须先注册所有web.api和OData路由,然后再注册MVC路由。。。为什么我仍然不明白,但它是有效的。@luis gouveia,你认为你可以更新你的答案来反映肖恩·威尔逊的观点吗?如果答案表明Api route config只需要在正常RouteConfig之前(而不是之前的两个步骤)就可以工作,那么我昨天就可以节省10-15分钟。您列表中的FilterConfig#3不是解决方案的一部分,因此指出这一点会有所帮助。谢谢在我的例子中,我创建了一个叫做Api的区域。坏主意。不管我的设置如何,一直给我404。所以,不要创建名为Api的区域。