我正在编写一个MVC3应用程序,需要以http:// [server] / [City] - [State] / [some term] /。
的形式使用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环境中处理这个问题?
感谢。
答案 0 :(得分:3)
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" });
答案 1 :(得分:2)
看看这两个答案:
要点:
答案 2 :(得分: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
);