在 C# MVC 中设置默认路由

Setting default route in C# MVC

我正在使用 C# MVC 创建一个项目并使用操作。由于需要,我现在使用Route来隐藏控制器名称,只显示页面名称。

路由配置

 routes.MapMvcAttributeRoutes();
            routes.MapRoute(
                name: "Law",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Law", action = "Home", id = UrlParameter.Optional }
            );

控制器 1(访问它:http://localhost:17920/dashboard)和(http://localhost:17920/alert)

    public class LawController : Controller
    {
        [Route("dashboard")]
        [ActionName("Home")]
        public ActionResult Home()
        {
            return View();
        }
        
        [Route("alert")]
        [ActionName("alert-list")]
        public ActionResult AlertList()
        {
            return View();
        }

控制器 2(访问:http://localhost:17920/list)

    public class ListController : Controller
    {
        [Route("list")]
        [ActionName("list-of-return")]
        public ActionResult listOfReturn()
        {
            return View();
        }

我正在尝试的是当我默认输入此 http://localhost:17920 URL 时,默认情况下应显示 http://localhost:17920/dashboard。 谢谢

您需要在 Controller 上定义 RoutePrefix,如下所示。同时将您的 Route("dashboard") 更新为 Route("Home"),因为这是您在路由配置中的默认操作名称。

[RoutePrefix("Law")]
public class LawController : Controller
{
    [Route("Home")]
    [ActionName("Home")]
    public ActionResult Home()
    {
        return View();
    }
    
    // Other action methods
}

详情请参考https://devblogs.microsoft.com/aspnet/attribute-routing-in-asp-net-mvc-5/


编辑 根据你问题中的编辑,你想要的更清楚。从您现有的代码中,您只需要在 LawControllerHome 操作上再添加一个 Route,如下所示,这样它就可以匹配 http://localhost:17920/http://localhost:17920/dashboard action 方法。

public class LawController : Controller
{
    [Route("")]
    [Route("dashboard")]
    [ActionName("Home")]
    public ActionResult Home()
    {
        return View();
    }
    
    [Route("alert")]
    [ActionName("alert-list")]
    public ActionResult AlertList()
    {
        return View();
    }