2

我正在 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。谢谢。

4

1 回答 1

3

您需要在下面定义RoutePrefix类似的Controller内容。还要更新您的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/了解更多详情。


编辑根据您问题中的编辑,您更清楚您想要什么。从您现有的代码中,您只需要再添加一个RouteoverLawControllerHome操作,如下所示,因此它可以与该方法匹配http://localhost:17920/& 。http://localhost:17920/dashboardaction

public class LawController : Controller
{
    [Route("")]
    [Route("dashboard")]
    [ActionName("Home")]
    public ActionResult Home()
    {
        return View();
    }
    
    [Route("alert")]
    [ActionName("alert-list")]
    public ActionResult AlertList()
    {
        return View();
    }
于 2020-12-17T08:01:01.893 回答