【问题标题】:Routing without controller and action in the urlurl 中没有控制器和操作的路由
【发布时间】:2011-03-10 13:57:07
【问题描述】:

如何配置 ASP.NET MVC 3 路由,使其不需要 url 中的控制器和操作?

我有这个来显示项目“abc123”的详细信息,配置了默认路由设置:

mysite.com/Home/Details/abc123

值“abc123”是 Home 控制器用于在数据库中查找正确项目的唯一值。

但我更喜欢这些超短网址:

mysite.com/abc123

该站点还将有很少的附加控制器,例如“关于”和“联系方式”。我假设我也必须专门配置这些,因此默认控制器不会开始寻找 ID 为“关于”或“联系”的项目的详细信息。我该怎么做?

更新:

这是我的路线最终的样子:

routes.MapRoute("About", "About", New With {.controller = "About", .action = "Index"})
routes.MapRoute("ID", "{id}", New With {.controller = "Home", .action = "Details"})
routes.MapRoute("Default", "", New With {.controller = "Home", .action = "Index"})

:)

【问题讨论】:

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


    【解决方案1】:

    试试这样的:

    routes.MapRoute("Site"
                  , "Site/{controller}/{action}"
                    , new { controller = "Home", action = "Index"});
    
    routes.MapRoute("Id"
                  , "{id}"
                    , new { controller = "Home", action = "Details"});
    

    第一个路由应该确保您可以将 /Site/About 和 /Site/Contact 分别映射到 AboutController 和 ContactController。重要的是首先映射它。

    第二条路线将确保 /abc123 被映射到 ID 为“abc123”的详细信息操作

    【讨论】:

    • 它正在工作!你知道我如何配置它以在没有 ID 的情况下调用不同的操作,即只是“mysite.com/”?
    • 太棒了! :) 我想说你可以通过添加一个像这样的默认路由来解决它 routes.MapRoute("Default", "", new { controller = "Home", action = "Index"});前几名。我建议您也为路由编写一些测试,因为通过更改其他地方的内容很容易破坏它们。
    【解决方案2】:

    你可以用这个。

    routes.MapRoute("abc123"
                  , "Home/Details/{name}"
                    , new { controller = "Home", action = "Detail", name = ""});
    

    你的动作看起来像:

    public ActionResult Detail(string name)
    {
      //...
    }
    

    【讨论】:

    • 抱歉,我不清楚:值“abc123”是唯一标识符,默认控制器将使用它在数据库中查找项目。我会更新问题。
    • 我不确定,但我认为您的模式与 url "mysite.com/abc123" 不匹配,因此未使用该路由。也许您的模式应该是“{name}”,然后默认填写缺少的方面?
    • @Jacob "abc123" 只是路线的名称,对其功能没有进一步影响,第一个字符串可以是任何东西。
    【解决方案3】:

    你也可以这样做:

    routes.MapRoute("abc123", "abc123", new { controller = "Home", action = "Details"});
    

    我正在使用 MVC3,它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2012-11-17
      • 1970-01-01
      • 2021-06-02
      相关资源
      最近更新 更多