MVC3和重写

时间:2011-05-25 02:16:44

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

我正在编写一个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环境中处理这个问题?

感谢。

3 个答案:

答案 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)

看看这两个答案:

要点:

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

答案 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
);