MVC Web Api路由,默认操作无效

时间:2012-07-30 15:37:57

标签: c# routes asp.net-web-api

在我TestController我有以下内容:

 [HttpGet]
    public IEnumerable<String> Active()
    {
        var result = new List<string> { "active1", "active2" };

        return result;
    }

    [HttpGet]
    public String Active(int id)
    {
        var result = new List<string> { "active1", "active2" };

        return result[id];
    }

RouteConfig中,映射是:

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

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

在浏览器中,以下请求有效:

api/test/active/1

但是这会返回内部服务器错误

api/test/active

如何以与默认Get相似的方式返回可能或可能没有参数的操作,你需要做什么?

更新1 正如Cuong Le所说,改变路线的顺序有所帮助,路线现在是:

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

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

我必须从ActionApi路由中删除action = "",否则其他控制器上的标准Get停止工作(即api / values)

api / test / active现在正在解析,但我现在得到一个500内部服务器错误/ api / test是否可以同时解析,所以api / test会返回“all”而/ test / active只返回“一些”?

2 个答案:

答案 0 :(得分:0)

由于您有两个名为action的方法,因此可能会感到困惑。尝试删除或重命名其中一个,看看是否有效。

答案 1 :(得分:0)

一种方法是为参数

提供默认值
[HttpGet]
public String Active(int id = 0)
{
    var result = new List<string> { "active1", "active2" };

    if (id == 0) {
      return result;
    } else {
      return result[id];
    }
}