5

我的项目中有一条简单的路线:

routes.MapRoute(
      name: "api",
      template: "api/{controller}/{action}");

在我的控制器中,我有两个动作:

    [HttpGet]
    public string Get(string value)
    {
        return value;
    }

    [HttpGet]
    public string Get(int id)
    {
        return id.ToString();
    }

现在,当我尝试执行类似的 urlapi/controller/get?id=1时它不起作用,因为框架无法区分两个动作。据我记得,它在普通的 web api 中运行得很好,因为很明显这个 url 只匹配基于它的参数的一个动作。我做错了什么还是新的 MVC6 不支持它?

4

1 回答 1

3

我做错了什么还是新的 MVC6 不支持它?

MVC 动作选择器在选择动作期间不考虑动作的参数。因此,您不能让两个动作对应一个路由模板。除了例如动作有不同的动作约束(HttpPost,HttpGet)。

在代码中选择动作逻辑。

理论上,一些基于参数的动作之间的选择逻辑必须进入 SelectBestActions 方法,但它什么也不做

于 2015-12-15T13:34:58.923 回答