繁体   English   中英

Asp.Net WebApi路由404。控制器变为“ Api”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM