c# - 为什么 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 在这个问题上做得不够。
解决方案
所以你有类似的东西:
public abstract class BaseController{
[HttpGet]
public IActionResult Create(Guid var1, DateTime var2){..
}
和
public class SomeClassController : BaseController{
[HttpGet]
public IActionResult Create(){..
}
问题是您不能有 2 条具有相同名称和不同签名的路由。这是因为路由并不确切知道你想去哪里:使用 url '/blalbalba/Create/' 你想要一个女巫吗?基类还是继承一次?这不是那么明显。
ps看看这个答案:
推荐阅读
- python - 抓取数据 PRAW - 如何改进我的代码?
- python - 如何为复杂的json内容动态设置值,接收键(或键路径)和值作为参数
- arrays - 从 Json 对象创建一个数组
- encoding - iText 7 pdfHTML setCharset 在 MS Server 2016 上不起作用
- r - 将数据框写入 Excel 工作簿中的 Excel 工作表时,Jcall 出错
- xcode - expo react-native 应用程序:在 xcode 中构建失败。PhaseScriptExecution 失败,退出代码非零
- assembly - 这个 shellcode 中使用的堆栈指针是什么?
- google-bigquery - 如何按 BigQuery 中不同字段中的值对字段进行分组过滤
- sql - 性能不佳的 SQL 语句
- c++ - 有人可以帮我理解这个递归代码吗