我开发的应用程序将取代更旧的应用程序。较旧的一个已经使用了很多年,并利用查询字符串引用来引用某些东西,
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页面的请求? 有谁知道如何阻止这种情况发生?
答案 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 }
);