【发布时间】:2017-12-08 08:57:14
【问题描述】:
我正在开发一个应用程序,它将取代一个更旧的应用程序。旧的已经使用了很多年,并利用查询字符串参数来引用某些东西,因为
http://example.com/view_object.asp?obj=Banana
我想将此重定向到我的 ObjectController 的索引操作,同时传递查询字符串值“香蕉”,以允许旧 URL 继续在新系统中运行。
所以,新的 URL 是:
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 核心“ASPClassic”处理程序通知我使用 MapRequestHandler 时发生 404。 听起来它现在将其解释为对经典 ASP 页面的请求? 有谁知道如何阻止这种情况发生?
【问题讨论】:
-
这绝对不是链接答案的副本。请参阅 Dots in URL causes 404 with ASP.NET mvc and IIS 了解您收到错误消息的原因。对于重定向,您应该使用 301 重定向,可以使用 IIS rewrite module 或 extending the
RouteBaseclass 完成(因为默认路由根本不处理查询字符串)。
标签: c# asp.net-mvc