没有控制器标签的WebAPI路由

时间:2012-10-12 06:56:44

标签: routing asp.net-web-api

我正在尝试使用WebAPI,到目前为止,我印象深刻,但仍然在使用路由。 我有这条路可行:

routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{query}",
            defaults: new { query = RouteParameter.Optional });

我想要一个'else'控制器(如果没有找到控制器,请使用此控制器),我当前的(非工作)路径是:

routes.MapHttpRoute(
            name: "ElseApi",
            routeTemplate: "api/g/{identifier}",
            defaults: new {
                controller = "Else",
                action = "Generalise",
                identifier = RouteParameter.Optional});

在我的ElseController中使用以下方法:

public string Generalise(string identifier)
        {
            return "gen";
        }

问题是什么?继续收到404错误......

1 个答案:

答案 0 :(得分:3)

请记住按正确顺序添加路线。

路由机制正在使用它可以匹配的第一条路由,因此如果首先定义了"api/{controller}/{action}/{query}"路由,那么像api/g/1之类的呼叫也将使用此路由,而不是第二条路径。

这里的经验法则是首先定义大多数特定路线,最后定义大多数常规路线 - 您还可以阅读this answer了解更多详情。