【问题标题】:How to specify route options to specific controllers in ASP.NET MVC 5如何在 ASP.NET MVC 5 中指定特定控制器的路由选项
【发布时间】:2023-03-14 15:10:02
【问题描述】:

我想从路由中抑制控制器,并且使用它可以正常工作:

         routes.MapRoute(
            name: "HomePages",
            url: "{action}",
            defaults: new { controller = "Home", action = "Index" }
            );

问题是当对不同的控制器(如“帐户”)执行相同操作时,只有第一个选项才会生效:

            routes.MapRoute(
     name: "LoginRoute",
     url: "{action}",
     defaults: new { controller = "Account", action = "Login" }
     );

我的目标是从路由中隐藏控制器,这样我就可以直接访问 mysite.com/login 和 mysite.com/index,当登录在 Account 控制器下并且 index 在 Home 控制器下时如何实现?

如何为 Account 操作指定第二个选项,并为 Home 操作保留第一个选项?

【问题讨论】:

  • 先想好你想要实现的目标 - 目前两者都匹配完全相同的一组 Url,第一个匹配将获胜...
  • @AlexeiLevenkov,我想从路由中隐藏控制器,所以我可以直接访问 mysite.com/login 和 mysite.com/index 如何实现登录在Account 控制器和索引下在Home 控制器下?
  • url: "Login", defaults: new { controller = "Account", action = "Login" } - 如果您不需要映射所有操作(确保首先提及更具体的路线)。
  • 有什么方法可以映射到控制器级别,而不仅仅是操作级别,假设我在 Account 下有很多操作,在 Home 下还有更多操作,我应该将它一一映射到操作级别吗?换句话说,一个控制器下所有操作的一个路由选项等等。

标签: c# .net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing


【解决方案1】:

您是否考虑过使用路由属性,例如:

[Route("{getId:int}")]
public ActionResult Show(int getId) { ... }

您可以将它与旧的路由方式结合使用。您确实需要在配置中明确设置此功能:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapMvcAttributeRoutes();
    }
}

我发现路由属性可以很容易地在我的控制器方法上设置好的路由。这也渗入了 web api 和 RESTFul 的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2015-07-17
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多