MVC3 MapRoute将aspx查询参数转换为路径

时间:2012-06-28 01:24:16

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

我正在开发一个将aspx网站重写为MVC3的项目。我想让旧网址在新网站上运行。我已经命名了我的控制器和操作,以便URL实际上在查询字符串中包含足够的信息以正确路由但是我无法使路由工作,因为它不喜欢?在网址中。

基本上我有这样的旧网址:

www.example.com/Something/SomethingElse/MyPage.aspx?Section=DetailSection&TaskId=abcdef

我尝试使用以下方法创建路线:

routes.MapRoute(
    "OldSite",
    "Something/SomethingElse/MyPage.aspx?Section={action}Section&Id={id}", 
    new { controller = "Task", action = "Index", id = UrlParameter.Optional }
);

我希望它路由到正确的新网址:

www.example.com/Task/Detail/abcdef

我知道MyPage.aspx页面的所有流量都应该转到我的新Task控制器,而Section参数的开头总是匹配该控制器上的一些相应操作。

不幸的是,我发现我收到的错误是路线不能包含问号。我该怎么处理?使用URL重写会更好吗?因为这是一个私人网站,我不关心返回永久重定向或任何东西 - 无论如何搜索引擎都没有链接到网站。我只是想确保在旧电子邮件中有URL的客户将到达新网站的正确页面。

1 个答案:

答案 0 :(得分:2)

在这种情况下,我认为最简单的方法是将旧页面映射到路径:

routes.MapRoute(
    "MyPage",
    "Something/SomethingElse/MyPage.aspx", 
    new { controller = "Task", action = "MyPageHandler" }
);

将此路由映射到TaskController中的操作方法:

public ActionResult MyPageHandler(string section, string taskId)
{
    if (section.Contains("Detail"))
    {
        // execute section
    }
}

通过这种方式,您可以将旧网站的查询字符串视为查询字符串:查询字符串。将这些参数直接传递给动作方法是解释旧网站的最佳MVC方式。