将较旧的获取URL替换为MVC中的Route

时间:2017-12-08 08:57:14

标签: c# asp.net-mvc

我开发的应用程序将取代更旧的应用程序。较旧的一个已经使用了很多年,并利用查询字符串引用来引用某些东西,

http://example.com/view_object.asp?obj=Banana

我希望将此重定向到我的ObjectController的索引操作,同时传递查询字符串值" Banana",以便允许较旧的网址继续使用新系统。

因此,新网址为:

http://example.com/Object/Banana

我认为这很简单,通过使用routes.MapRoute,但我遇到了一个我无法使用的问题?字符。

我该怎么做?

以下是尝试过的内容:

routes.MapRoute(
        name: "OldObjectRoute",
        url: "view_object.asp?obj={object}",
        defaults: new { Controller = "Object", action = "Index", object = UrlParameter.Optional }
        );

修改 所以,根据下面的建议,这是重复,我确实尝试了建议。 我提出了:

routes.MapRoute(
                name: "OldObjectRoute",
                url: "view_object.asp{OldList}",
                defaults: new { Controller = "Object", action = "Index", OldList = UrlParameter.Optional }
                );

在我的控制器中,我有一个可选字符串" OldList"现在,期望从中获取值 - 并调整查询字符串以删除查询,并根据请求的对象返回正确的数据。

然而,现在它根本不起作用 - 我通过IIS Web Core" ASPClassic"使用MapRequestHandler时404发生的处理程序。 听起来它现在将其解释为对经典ASP页面的请求? 有谁知道如何阻止这种情况发生?

1 个答案:

答案 0 :(得分:0)

url方法的MapRoute参数指定了URL模式。这意味着您不必在其中指定查询字符串,而是指定预期的路由值名称。所以你的路线映射应该是这样的:

    routes.MapRoute(
    name: "OldObjectRoute",
    url: "{controller}/{action}/{object}",
    defaults: new { Controller = "Object", action = "Index", object = UrlParameter.Optional }
    );

但是这个映射应该已经存在,所以你可能想要区分" old"路线,所以:

    routes.MapRoute(
    name: "OldObjectRoute",
    url: "old/{controller}/{action}/{object}",
    defaults: new { Controller = "Object", action = "Index", object = UrlParameter.Optional }
    );