2011-05-25 61 views
3

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

据我所知,MVC3包含使用其在Global.asax文件中定义的路由引擎{CONTROLER}/{行动}/{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重写风味解码URL,例如http://www.myserver.com/City-State/somesearch/到查询字符串,看起来像这样的参数: http://www.myserver.com/city=City&state=State&query=somesearch

请记住,这一要求将从http://www.myserver.com/Home

现身3210

能这样可以不必指定控制器......像这样来完成:

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

...或者是不是真的最好让控制器上市?

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

谢谢。

+0

指向您的MVC应用程序的URL是否已经存在(来自其他应用程序,PPC等的链接)?还是你问如何捕捉参数? – stepanian 2011-05-25 02:33:16

+0

我在问上述正确的捕获参数。 – ElHaix 2011-05-25 02:47:37

回答

3

网址在asp.net MVC3改写: - 你可以写在URL Global.asax文件重写代码: -

 //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" }); 
0

您可以通过在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 
);