1

我正在开发一个将 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 }
);

我希望它路由到正确的新 URL,即:

www.example.com/Task/Detail/abcdef

我知道 MyPage.aspx 页面的所有流量都应该流向我的新任务控制器,并且 Section 参数的开头始终与该控制器上的几个相应操作之一匹配。

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

4

1 回答 1

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 的方式。

于 2012-06-28T05:58:46.227 回答