控制器类型{1}上的当前操作请求{0}不明确

Sta*_*tan 6 c# rest asp.net-mvc routes asp.net-mvc-4

我有两个动作,我想要我的路线/users/users/{id}不同.但它会引发我的错误.

是否有可能实现这种排序而无需手动创建每个路径,我将有其他控制器将遵循类似的模式,并为所有这些编写自定义路线似乎是多余的和一般的坏主意.

错误

控制器类型'UsersController'上的当前操作请求'Index'在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类型Api.Controllers.UsersController上的Index()System.Web.Mvc.ActionResult索引(Int32)在类型Api.Controllers.UsersController上

public class UsersController : Controller
{
    public ActionResult Index()
    {
        return null;
    }

    public ActionResult Index(int id)
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Max*_*oro 5

你需要一个ActionMethodSelector

public class RequiresParameterAttribute : ActionMethodSelectorAttribute {

   readonly string parameterName;

   public RequiresParameterAttribute(string parameterName) {
      this.parameterName = parameterName;
   }

   public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) {
      return controllerContext.RouteData.Values[parameterName] != null;
   }
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

public class UsersController : Controller
{
    public ActionResult Index()
    {
        return null;
    }

    [RequiresParameter("id")]
    public ActionResult Index(int id)
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定以上是否可行,但应该给你一个想法。