我正在尝试使用:api / error / LogJsError和一些formdatacollection达到特定的webapi操作。我有一个像这样的ErrorController:
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路由不使用?
答案 0 :(得分:1)
Duuuh ...我在发布后找到答案:https://msdn.microsoft.com/en-us/library/cc668201%28v=vs.140%29.aspx
请注意:"为避免错误的处理程序处理请求,您必须在定义路由时考虑所有这些条件。 Route对象在Routes集合中出现的顺序非常重要。尝试从集合中的第一个路径到最后一个路径进行路径匹配。匹配发生时,不再评估路由。 通常,按照从最具体的路线定义到最不具体的路线定义的顺序,将路线添加到路线属性。"
我的MVC路由(例如:{controller} / {action} / {id})在(更具体的)WebApi路由之前被添加到routecollection(例如:api / {controller} / {action} / {id} )。所以不要使用:
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
在Application_Start()中,使用:
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);