Asp.NETWebAPI路由404。控制器变为;空气污染指数;
我试图通过使用:api/error/LogJsError和一些formdatacollection来实现特定的webapi操作。我有这样一个错误控制器: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
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()中,使用: