为什么MVC会忽略继承的控制器中的控制器方法?

时间:2019-02-11 10:08:15

标签: c# asp.net-mvc

...可能根本不是问题,但这就是我现在的样子。

我有一个具有多个继承层的控制器结构。基本控制器是实现Controller的控制器,它具有一个名为Create(Guid var1, DateTime? var2)的方法,其名称类似于/MyDomain/Create/00000-0000-0000-000000

我目前正在尝试在继承树中下方带有签名Create()的控制器中实现一个方法,该签名带有QueryString参数。 (/MyDomain/Create?otherVar=somevalue)但是,ASP.NET认为这作为“端点”无效,并抛出一条错误消息,指出The parameters dictionary contains a null entry for parameter 'var1' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Create(System.Guid, System.Nullable`1[System.DateTime])'

我真的不知道这是怎么回事。如果我尝试在同一控制器上调用另一个方法(其名称是唯一的,并且在继承堆栈中未使用的较高名称,例如/MyDomain/DifferentMethod),那么它将正常工作。

我的google-fu缺少此问题。

1 个答案:

答案 0 :(得分:0)

所以你有类似的东西:

public abstract class BaseController{

 [HttpGet]
 public IActionResult Create(Guid var1, DateTime var2){..
}

public class SomeClassController : BaseController{
 [HttpGet]
 public IActionResult Create(){..
}

问题是您不能有两个具有相同名称和不同签名的路由。 这是因为路由无法确切知道您要去的地方:使用URL'/ blalbalba / Create /'巫婆,您想要一个吗? 基类还是继承一次? 不太明显。

P看看这个答案:

ASP.NET MVC ambiguous action methods