【问题标题】:MVC3 and RewritesMVC3 和重写
【发布时间】:2011-09-01 09:48:12
【问题描述】:

我正在编写一个 MVC3 应用程序,它需要以 http://[server]/[City]-[State]/[some term]/ 的形式使用 URL 重写。

据我了解,MVC3 包含一个使用在 Global.asax 文件中定义的 {controler}/{action}/{id} 的路由引擎:

    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 = UrlParameter.Optional } // Parameter defaults
        );

    }

传统上(在非 MVC 应用程序中),我会使用一些 URL 重写风格来将诸如 http://www.myserver.com/City-State/somesearch/ 之类的 URL 解码为如下所示的查询字符串参数: http://www.myserver.com/city=City&state=State&query=somesearch

请记住,此请求将来自http://www.myserver.com/Home

这可以在不指定控制器的情况下完成吗...像这样:

routes.MapRoute(
            "Results",
            "{city}-{state}/{searchTerm}",
            new { controller = "Results", action = "Search" }
        );

... 还是最好列出控制器?

你如何在 MVC3 环境中处理这个问题?

谢谢。

【问题讨论】:

  • 指向您的 MVC 应用程序的 URL 是否已经存在(来自其他应用程序的链接、PPC 等)?或者您是在问如何捕获参数?
  • 我问的是正确捕获参数,这些参数是上面列出的形式。

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


【解决方案1】:

asp.net MVC3 中的 URL 重写:- 您可以在 Global.asax 文件中编写用于 url 重写的代码:-

       //Default url
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "", 
            new { controller = "Home", action = "Index", id = "" }
        );

      //others url rewriting you want

        RouteTable.Routes.MapRoute(null, "Search/{City_State}/{ID}", new { controller = "Home", action = "Search" });

【讨论】:

    【解决方案2】:

    看看这两个答案:

    总结:

    • 在默认路由之前指定自定义路由
    • 在一般路线之前定义特定路线,因为它们可能同时匹配两者。
    • 默认值是可选的。
    • 在默认参数对象中指定默认Controller和Action。

    【讨论】:

      【解决方案3】:

      您可以通过在Global.asax 文件中注册路由来做到这一点,但是要注册路由很重要,您必须先注册旧路由,然后再注册新路由。

      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      
      // for Old url 
      routes.MapRoute(
          "Results",
          "{city}-{state}/{searchTerm}",
          new { controller = "Results", action = "Search" }
      );
      
      // For Default Url 
      routes.MapRoute(
          "Default", // Route name
          "{controller}/{action}/{id}", // URL with parameters
          new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
      );
      

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 2012-10-18
        • 2012-09-04
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        • 2012-01-08
        相关资源
        最近更新 更多