MVC网页API路线与默认操作不工作(MVC Web Api Route with default

2019-10-17 02:30发布

在我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

你有什么做的返回可能或maynot具有以类似的方式来默认参数得到一个动作

更新1作为的Cuong乐建议,改变路线的顺序的帮助下,该航线现在:

 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 }
        );

我不得不删除action = ""从ActionApi路线,否则标准获取的其他控制器停止工作(即,API /值)

API /测试/主动现已解决,但现在我得到/ API 500内部服务器错误/测试它possile兼得做出决议,因此API /测试将返回“所有”和/测试/活跃,只有回到“一些” ?

Answer 1:

这大概是感到困惑,因为你有一个名为动作两种方法。 尝试删除或重命名其中的一个,看看是否能工作。



Answer 2:

做到这一点的方法之一是,为参数提供默认值,

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

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


文章来源: MVC Web Api Route with default action not working