0

考虑这样的 Api 控制器:

public class MyApiController
{
    [HttpGet]
    public IEnumerable<object> GetItems(int from, int count)
    {
        ...
    }

    [HttpGet]
    public IEnumerable<object> GetActiveItems(int from, int count)
    {
        ...
    }
}

如果我打电话/MyApi/GetActiveItems/?from=0&count=20,那么可以路由操作GetItems而不是GetActiveItems因为参数相似性。如果我更改参数名称,例如(int fromActive, int countActive)它可以正常工作。

为什么呢?为什么不使用动作名称来匹配方法名称?

我应该在路由中做些什么吗?

4

1 回答 1

2

似乎问题出在与通常情况不同的地方设置了错误的路由集:

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

然后有正确的路由:

routes.MapHttpRoute(
                name: "DefaultProvider",
                routeTemplate: "api/{controller}/{action}"
            );

在这种情况下,由于我没有{action}在第一个路由中使用,动作名称转到{id}并且路由尝试通过其参数解析动作。

于 2013-09-14T05:47:34.130 回答