【问题标题】:ASP.NET MVC URL routing doesn't give me pretty URLsASP.NET MVC URL 路由没有给我漂亮的 URL
【发布时间】:2009-03-03 19:34:44
【问题描述】:

我已经建立了一个 ASP.NET MVC 项目,一切都很好,但是我在路由方面确实有一个问题。我的 Global.asax 看起来像这样:

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

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    }

所以,没有什么不寻常的。我的问题是,当我使用 HTML.ActionLink 链接到控制器/动作/参数时,如下所示:

<%= Html.ActionLink("My link", "SomeAction", "SomeController", new {param="someParam"})%>

它应该生成(至少在我看来是有意义的)一个链接,例如:http://www.localhost/SomeController/SomeAction/someParam

但它会生成这样的链接:http://localhost/SomeController/SomeAction?param=someParam

如果我手动创建链接到预期结果(SomeController/SomeAction/someParam)的链接,则调用正确的控制器和动作,但动作方法中定义的参数始终为空。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    尝试添加:

    routes.MapRoute(
                        "Default",                                                                                              // Route name
                        "{controller}/{action}/{param}",                                                   // URL with parameters
                        new { controller = "Home", action = "Index", param = "" }  // Parameter defaults
                );
    

    【讨论】:

      【解决方案2】:

      如果参数名称是id 而不是param,我认为该链接只会使用您期望的默认路由。如果您想在那里提供一些其他参数,则必须创建不同的路线。

      【讨论】:

      • 嗯,这意味着我必须为每个需要一组不同参数的新控制器操作指定一个新的路由规则?这将导致企业应用程序的大量路由规则。难道没有比这更动态的方法了吗?
      • 如果这真的是动态的,你会不会失去类型安全、参数安全和可测试性?
      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多