MVC3和重写

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

据我了解,MVC3包含一个使用{controler} / {action} / {id}的路由引擎,该引擎在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 = 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环境中处理这个问题?

谢谢。

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

看看这两个答案:

  • ASP.NET MVC路由:如何定义自定义路由
  • 在ASP.Net MVC中定义自定义URL路由

摘要:

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

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