C# 为什么ASP.NET MVC不支持多态性?

C# 为什么ASP.NET MVC不支持多态性?,c#,asp.net-mvc,C#,Asp.net Mvc,编译但不起作用: public class ProductController : Controller { public ActionResult List(int a) { return View(); } public ActionResult List(int a, int b) { return View(); } } 获取错误: 控制器类型上的当前操作请求“列表” “ProductControlle

编译但不起作用:

public class ProductController : Controller
{
    public ActionResult List(int a)
    {
        return View();
    }

    public ActionResult List(int a, int b)
    {
        return View();
    }
 }
获取错误:

控制器类型上的当前操作请求“列表” “ProductController”在以下操作方法之间不明确: 类型上的System.Web.Mvc.ActionResult列表(Int32) Shop.Controllers.ProductController System.Web.Mvc.ActionResult 类型Shop.Controllers.ProductController上的列表(Int32,Int32)


我对无法实现的原因很感兴趣。

MVC是一个处理将http请求路由到控制器操作的框架。默认情况下,在匹配路由时,任何缺少的参数都将作为null传递,并且忽略额外的参数。因此,路由引擎将查看您的路由,将其与默认路由路径相匹配,并且无法判断应该调用哪个路由(这是不明确的)


您可以通过将显式路由添加到路由配置中并显式调用预期参数来解决此问题

好吧,让我们假装你决定编写它,而不是ScottGu和共同编写ASP.NETMVC

您编写了路由处理程序,用于处理到控制器的路由,然后处理到操作的路由

现在,您的MVC处理程序开始执行

它检查路由,确定它的
controller=“Some”
so,实例化(使用反射)
SomeController
类,然后它看到
action=“List”
调用
List
方法(action)


现在告诉我们如何区分
List(inta)
List(inta,intb)

ASP.NET MVC只是一个web框架。它根本不是一种编程语言。我认为不存在支持问题..MVC被设计为路由到操作,而不管您是否实际传递了正确数量的参数。任何缺少的参数都将变为null,所有额外的参数都将被忽略。因此,它将重载方法视为重复操作。