【问题标题】:How do you set the default route in MVC6 when using attributes?MVC6中使用属性时如何设置默认路由?
【发布时间】:2016-01-21 13:24:16
【问题描述】:

在 MVC5 中,您可以使用控制器上的以下属性设置默认路由吗?

[路线(“{action=index}”)]

在 MVC6 中这个等价物是什么?

更新

这是我在 MVC5 中的代码

    [Route("{action=index}")]
    public class StaticPagesController : Controller
    {
        public ActionResult About()
        {
           return View();
        }

        public ActionResult Contact()
        {
           return View();
        }

        public ActionResult Index()
        {
           return View();
        }
    }

我无法弄清楚如何在 MVC6 中做同样的事情,但我已经能够使用以下方法获得相同的功能:

    [Route("[action]")]
    public class StaticPagesController : Controller
    {
        public ActionResult About()
        {
           return View();
        }

        public ActionResult Contact()
        {
           return View();
        }

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

【问题讨论】:

    标签: asp.net asp.net-mvc-routing asp.net-core-mvc attributerouting


    【解决方案1】:

    您可以使用Route 属性装饰您希望成为默认操作的特定操作方法,并将[controller] 作为路由模板传递给该方法。所以每当你收到yoursite/yourcontroller 的请求时,传入的请求都会被重定向到这个特定的操作方法。

    public class SettingsController : Controller
    {      
        public IActionResult Index()
        {
            return View();
        }
    
        [Route("[controller]")]
        public IActionResult OtherIndex()
        {
            return Content("This will be the response for mySite/Settings request");
        }
    }
    

    编辑: 根据评论

    我不想在 URL 中包含控制器名称。我希望它是 domain.com/About 而不是 domain.com/StaticPages/About

    使用属性路由,您可以使用Route 属性装饰您的操作方法,并将[action] 作为模板名称。

    public class StaticPagesController : Controller
    {      
        [Route("[action]")]
        public IActionResult About()
        {
            // This action method will be executed for "yourSite/About" request
            return View();
        }
    }
    

    使用上述方法,您的应用中不能有 2 个同名的操作方法例如:HomeController 和 @987654332 中不能有 About 操作方法@)

    【讨论】:

    • [控制器] 在行动?
    • @CoolBreeze 是的。使该操作方法成为控制器的默认方法。
    • 这不起作用。我不确定是不是因为我的控制器上有以下属性: [Route("[action]")] public class StaticPagesController : Controller
    • 是的。您不需要该控制器级别属性。试试我在答案中的代码。它应该可以正常工作。
    • 我这样做是因为我不想在 URL 中包含控制器名称。例如我希望它是 domain.com/About 而不是 domain.com/StaticPages/About
    猜你喜欢
    • 2018-01-14
    • 2021-01-19
    • 1970-01-01
    • 2016-07-03
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2017-01-06
    相关资源
    最近更新 更多