asp.net MVC 默认操作在区域中不起作用

asp.net MVC default action not working in area

我有一个项目,其中声明了一个设置区域和一个 URL,只要我明确包含“/Index”操作,它就可以工作。问题是当我使用 RedirectToAction("Index") 时,它从 URL 中排除了“/Index”,我得到了 404 页面未找到。 URL 是:

http://localhost:40078/Setup/Facility/Index - 作品
http://localhost:40078/Setup/Facility/ - 404(有或没有尾随 /)

路由配置:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapMvcAttributeRoutes();

        AreaRegistration.RegisterAllAreas();

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "T.C.MVCWeb.Controllers" }
        );
    }

设置区域注册:

public class SetupAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Setup";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Setup_default",
            "Setup/{controller}/{action}/{id}",
            defaults: new { action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "T.C.MVCWeb.Areas.Setup.Controllers" }
        );
    }
}

请求控制器

namespace T.C.MVCWeb.Areas.Setup.Controllers
{
    public class FacilityController : Controller
    {
        // GET: FacilitySetup
        public ActionResult Index()
        {
            ...
        }
    }
}

我添加了 Phil Haack 的 RouteDebugger,可以看到 404 请求认为 "Setup" 是控制器,但我不明白为什么,其余的输出让我感到困惑而不是帮助。

感谢 NightOwn888 的评论,我找到了一条通过属性声明的路由。有问题的路由属性声明了 Setup/{action},旨在允许区域 URL 本身 http://localhost:40078/Setup/ 映射到 SetupController。