【问题标题】:Asp.Net MVC Routing Passing Controller in Url网址中的 Asp.Net MVC 路由传递控制器
【发布时间】:2013-09-06 12:37:14
【问题描述】:

我尝试编写自定义路由。总是出现 404 错误是什么问题。我阅读了有关路由的信息但没有弄清楚。我想显示如下代码的内容,名称必须介于 a-Z 和 0-9 之间。谢谢。

{action}/{name} /details/kll219dkl

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

            routes.MapRoute(
                name: "test",
                url: "details/{name}",
                defaults: new { controller = "Test", action = "Details", name = "ujElk392ow" }
            );

并且只是为了显示正在工作

 public ActionResult Details(string name)
 {
    return Content(name);
 }

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-mvc-routing


    【解决方案1】:

    怎么样:

    routes.MapRoute(
        name: "test",
        url: "{controller}/details/{name}",
        defaults: new { controller = "Test", action = "Details", name = String.Empty },
        constraints: new { name = @"^[a-zA-Z0-9]+$" }
    );
    

    这会给你:

    Url:                        Mapped Destination:
    /Test/details/kll219dkl     TextController->Details(name: "kll219dkl")
    

    【讨论】:

    • 感谢您的回复,看起来不错。当我测试控制器/动作/参数有效但我不想只显示控制器名称时动作/参数或控制器/参数动作总是 const。
    • @Display:它总是会是同一个控制器吗?如果是这样,请从url: 参数中删除{controller}/ 部分并保留defaults:
    • 请你写控制器/参数或动作/参数路线图我试过还是不行。
    • 假设TestController { Details(name) } 只是从我的回答中删除{controller}/,然后访问details/kll219dkl
    • 谢谢布拉德,我确实放弃了这个问题对我不起作用,我正在使用默认路线图。也许将来我会在这方面工作。
    【解决方案2】:

    除了布拉德的回答。尝试更改路线的顺序。运行时采用适合请求的第一条路线。因此,必须从最确定到最一般定义路线。在您的订单中,运行时将始终采用默认路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2013-09-29
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多