如何编写asp.net MVC Route来重写url,如mysite.com/city-london.aspx?

时间:2013-12-27 05:41:37

标签: asp.net-mvc asp.net-mvc-routing

我有这样的城市页面:mysite.com/city-london.aspx。 像mysite.com/city/london这样的路线很容易。但我必须使用city-london.aspx来支持旧网址

我如何为此做出一条路线?下面的代码对我不起作用:-(。我想要的只是在RegisterRoutes中写作

routes.MapRoute(
            "City",
            "city-{id}.aspx",
            new { controller = "Home", action = "City", id = UrlParameter.Optional }
        );

更新

下面的代码对我有用,但我不想这样编码。

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var m = Regex.Match( Request.Url.AbsolutePath, @"/city-(.+?)\.aspx" );
        if (m.Success)
        {
            var path = "/?id=" + m.Groups[1].Value;
            Context.RewritePath(path, true);
        }
    }

2 个答案:

答案 0 :(得分:1)

将此代码放在默认路由之前

routes.MapRoute(
               name: "City",
               url: "{pge}",
               defaults: new { controller = "Home", action = "City" },
               constraints: new { pge = @"^city-[a-z]{1,10}.aspx$" }
           );

答案 1 :(得分:0)

* .aspx是IIS的已知扩展,因此将以不同方式处理。如果删除路径定义中的.aspx,然后浏览到mysite.com/city-london,它应该可以正常工作。如果没有,请发布错误,如果有的话。