[英]Asp.Net WebApi Routing 404. Controller becomes “Api”
我正在尝试使用具有某些formdatacollection的api / error / LogJsError来达到特定的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路由未使用?
Duuuh ...我将答案发布在以下位置后立即找到了答案: https ://msdn.microsoft.com/en-us/library/cc668201%28v=vs.140%29.aspx
请注意以下几点:“为避免错误的处理程序处理请求,在定义路由时必须考虑所有这些条件。Route对象在Routes集合中出现的顺序很重要。尝试从第一个路由到最后一个路由进行路由匹配集合中的路由。发生匹配时,不会再评估任何路由。 通常,将路由从最具体的路由定义到最不具体的定义依次添加到Routes属性。
我的MVC路由(例如:{controller} / {action} / {id})已添加到(更具体的)WebApi路由(例如api / {controller} / {action} / {id})之前的路由集合中。 因此,不要使用:
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
在Application_Start()中,使用:
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.