我在控制器中有一个名为Index的Action.这可以像下面这样调用:
>没有参数
>使用custon enum
>使用日期时间
我有一个自定义属性,应该设置为2.和3.,但不是1.
所以我尝试了以下方法:
public ActionResult Index() { return View(); } [MyCustomAttribute] public ActionResult Index(StatusEnum status) { return View(); } [MyCustomAttribute] public ActionResult Index(DateTime date) { return View(); }
这似乎不可能,我总是得到一个错误,索引是模棱两可的.但我真的不明白为什么:动作有不同的参数,所以用参数区分它们应该没问题.
当我尝试这样的事情时,我得到了同样的错误:
public ActionResult Index() { return View(); } [MyCustomAttribute] public ActionResult Index(StatusEnum status,DateTime date) { return View(); }
在这种情况下,它应该是真正清除的,没有问题来处理没有参数的所有请求到第一个Action而其余的请求到第二个Action.我觉得这很奇怪,因为在原生C#中,制作这样的重载绝对没有问题.
第二点:当重载是出于任何不可能的原因时,我该如何处理?排除没有参数的Index-Action(如果可能)是没有选项的,因为我也在其他控制器中使用该属性,并且应该处理所有Index-Actions.
解决方法
当我有这个网址时:
http://www.test.com/
您认为这条路线会带您到哪里?它可以明显地进入Index()动作,但为什么它不能进入Index(StatusEnum status,DateTime date)动作呢?这两个参数都可以为空,因此它们只是null.
关键是路由引擎不知道你想要什么,也许你想要有空参数,也许不是.
你可以尝试这样的事情:
public ActionResult Index() { return View(); } [Route("SetStatus/{status}")] public ActionResult Index(StatusEnum status) { return View(); } [Route("SetDate/{date}")] public ActionResult Index(DateTime date) { return View(); }