gpt4 book ai didi

asp.net - 为什么在 ASP.NET MVC5 中无法重载?

转载 作者:行者123 更新时间:2023-12-04 23:01:37 25 4
gpt4 key购买 nike

我在 Controller 中有一个名为 Index 的操作。这可以像下面这样调用:

  • 不带参数
  • 带有自定义枚举
  • 带日期时间

  • 我有一个自定义属性,它应该设置为 2. 和 3.,而不是 1。
    所以我尝试了以下方法:
        public ActionResult Index() {
    return View();
    }

    [MyCustomAttribute]
    public ActionResult Index(StatusEnum status) {
    return View();
    }

    [MyCustomAttribute]
    public ActionResult Index(DateTime date) {
    return View();
    }

    这似乎不可能,我总是收到一个错误,即 Index 不明确。但是我真的不明白为什么:Actions有不同的参数,所以通过参数来区分它们应该没有问题。

    当我尝试这样的事情时,我得到了同样的错误:
        public ActionResult Index() {
    return View();
    }

    [MyCustomAttribute]
    public ActionResult Index(StatusEnum status, DateTime date) {
    return View();
    }

    在这种情况下,处理所有没有参数的第一个 Action 和其余的第二个 Action 的请求应该非常清楚并且没有问题。我认为这很奇怪,因为在原生 C# 中进行这样的重载绝对没有问题。

    第二点:无论出于何种原因都无法重载时,我该如何处理?排除不带参数的索引操作(如果可能)是不行的,因为我也在其他 Controller 中使用了该属性,并且应该处理所有索引操作。

    最佳答案

    虽然从 C# 的角度来看重载是有意义的,但 MVC 路由不知道如何处理一些重载。如果在属性路由中使用类型化参数,则可以使重载工作...

    [Route("controller/action")]
    public ActionResult Index() {
    return View();
    }

    [MyCustomAttribute]
    [Route("controller/action/{status:int}")]
    public ActionResult Index(StatusEnum status) {
    return View();
    }

    //
    [MyCustomAttribute]
    [Route("controller/action/{date:datetime}")]
    public ActionResult Index(DateTime date) {
    return View();
    }

    将此行添加到 RouteConfig.cs 以启用属性路由...
    routes.MapMvcAttributeRoutes();

    关于asp.net - 为什么在 ASP.NET MVC5 中无法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22002079/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com