【问题标题】:MVC Routing issue with same parameter different names具有相同参数不同名称的 MVC 路由问题
【发布时间】:2017-05-27 06:48:42
【问题描述】:

我的 RoutingConfig.cs 中有以下路由

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

        // Not working why?
        routes.MapRoute(
            name: "AdminLoginRequestUrl",
            url: "{controller}/{action}/{requestUrl}",
            defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
        );

问题是第二个路由不工作 我在这里想念什么?有人有任何提示或想法 MVC 对我来说有点新

【问题讨论】:

    标签: c# model-view-controller routing


    【解决方案1】:

    您不能仅通过区分参数名称来创建不同的路由,两个路由都呈现相似的一个。还将您的自定义路线移至默认路线之上。你可以试试这个

        routes.MapRoute(
            name: "AdminLoginRequestUrl",
            url: "{controller}/{action}/route2/{requestUrl}",
            defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
        );
    
       routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    

    您可以使用 route2 中的任何内容来区分默认路由

    【讨论】:

    • route2 必须是什么?抱歉,我是 MVC 新手
    • 任何你想用来区分默认值的东西
    • 只需要在它们之间做一些区别
    • 如果我已经有 2 个参数而不需要添加第三个参数怎么办>>
    • 不,它不是参数,它将成为路径的一部分,如 admin/login/route2/{yourparam}
    【解决方案2】:

    你不能通过变量名来区分你的路线。您可以像这样创建更具体的路线:

        routes.MapRoute(
            name: "AdminLoginRequestUrl",
            url: "Admin/{action}/{requestUrl}",
            defaults: new { controller = "Admin", action = "Login", requestUrl= UrlParameter.Optional }
        );
    
    routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    

    注意注册的顺序很重要。

    或者您可以将参数重命名为适合两个控制器的名称并使用它。

    【讨论】:

      【解决方案3】:

      考虑使用MapHttpAttributeRoutes(),您可以在此处阅读:https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/1

      编辑:更改链接以获得更好的文章。

      然后您可以使用属性为您的操作定义更具体的规则。

      例子:

      public class Admin : Controller
      {
          [Route("admin/{requestUrl}")]
          public ActionResult Login(string requestUrl) { ... }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-01-22
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        相关资源
        最近更新 更多