Asp.NETWebAPI路由404。控制器变为;空气污染指数;

Asp.NETWebAPI路由404。控制器变为;空气污染指数;,asp.net,asp.net-web-api,routing,Asp.net,Asp.net Web Api,Routing,我试图通过使用:api/error/LogJsError和一些formdatacollection来实现特定的webapi操作。我有这样一个错误控制器: public class ErrorController : ApiController { [System.Web.Http.HttpPost] public void LogJsError(FormDataCollection form) { var s = form.Aggregate("Javas

我试图通过使用:api/error/LogJsError和一些formdatacollection来实现特定的webapi操作。我有这样一个错误控制器:

public class ErrorController : ApiController
{
    [System.Web.Http.HttpPost]
    public void LogJsError(FormDataCollection form)
    {
        var s = form.Aggregate("Javascript error: message", (current, i) => current + (": " + i.Value));
        new Logger(HttpContext.Current).LogException(new Exception(s));
    }
}
config.Routes.MapHttpRoute(
            name: "ApiWithAction",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
路由的配置如下所示:

public class ErrorController : ApiController
{
    [System.Web.Http.HttpPost]
    public void LogJsError(FormDataCollection form)
    {
        var s = form.Aggregate("Javascript error: message", (current, i) => current + (": " + i.Value));
        new Logger(HttpContext.Current).LogException(new Exception(s));
    }
}
config.Routes.MapHttpRoute(
            name: "ApiWithAction",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
在WebApiConfig.Register中

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
在RouteConfig.RegisterRoutes内部


但无论我做什么,routecollection都会返回controller=“Api”,从而导致404。我做错了什么,为什么api路由没有使用?

duuuuh…我在发布后找到了答案:

请注意:为了避免错误的处理程序处理请求,必须在定义路由时考虑所有这些条件。管线对象在管线集合中的显示顺序非常重要。尝试从集合中的第一个路由到最后一个路由进行路由匹配。当匹配发生时,将不再计算任何路由一般情况下,将路由按从最特定的路由定义到最不特定的路由定义的顺序添加到routes属性。

我的MVC路由(例如:{controller}/{action}/{id})是在(更具体的)WebApi路由(例如:api/{controller}/{action}/{id})之前添加到routecollection的。因此,不要使用:

RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
在应用程序_Start()中,使用: