Asp.net mvc 3 MVC3 MapRoute将aspx查询参数转换为路由

Asp.net mvc 3 MVC3 MapRoute将aspx查询参数转换为路由,asp.net-mvc-3,url-rewriting,url-routing,asp.net-mvc-routing,Asp.net Mvc 3,Url Rewriting,Url Routing,Asp.net Mvc Routing,我正在做一个项目,将aspx站点改写为MVC3。我想让旧的URL在新网站上工作。我已经命名了我的控制器和操作,这样URL在查询字符串中实际上包含了足够的信息来正确路由,但是我很难让路由正常工作,因为它不喜欢?在URL中 基本上我有这样的旧URL: www.example.com/Something/SomethingElse/MyPage.aspx?Section=DetailSection&TaskId=abcdef 我尝试使用以下方法创建路线: routes.MapRoute(

我正在做一个项目,将aspx站点改写为MVC3。我想让旧的URL在新网站上工作。我已经命名了我的控制器和操作,这样URL在查询字符串中实际上包含了足够的信息来正确路由,但是我很难让路由正常工作,因为它不喜欢?在URL中

基本上我有这样的旧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页面的所有流量都应该转到我的新任务控制器,并且节参数的开头总是与该控制器上的几个相应操作中的一个匹配


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

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

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

非常有效,谢谢。虽然没有我最初的想法那么简单,但它给了我更好的控制,更容易检查有效值和处理无效URL。我只是为节的可能值添加了一个switch语句,然后使用了RedirectToAction(“,new{id=taskId}),它的工作原理与我希望的完全一样。