如何创建 MVC 路由来拦截经典 ASP URL?

Dav*_*Can 5 asp.net-mvc asp.net-mvc-routing

我的问题在前面

如何构造一个路由,以便 MVC 拦截经典 ASP URL 并执行 MVC 操作?

我正在将旧版经典 ASP 应用程序迁移到 MVC,并且需要让 MVC 拦截几个旧版 ASP URL,因为它们是对应用程序进行外部访问的主要端点。但我似乎不知道如何正确地做到这一点。

我检查了其他几个问题,但没有找到我要找的东西,但也许我今天的搜索能力很差。这个是特定于区域的,但看起来与我的类似,但仍然不起作用,是一种可能的解决方法,但我真的宁愿在 MVC 中完全处理这个问题并完全消除遗留文件。

我想做的事

给定:/foo/bar.asp

映射到:/InboundLinks/HandleBar

(一个 URL 将是 GET 请求,但另一个 URL 将是包含一些敏感数据的 POST,因此我需要拦截它们,并且 POST 数据仍然可用于 MVC,不确定 301 重定向是否会执行此操作)

我不想做什么

我根本不想运行经典的 ASP 页面。(如果这是唯一的解决方法,我愿意让它仅执行 301 重定向到 MVC URL,但仅此而已)我希望 MVC 拦截并处理 URL。我这么说是因为我在这里和其他地方发现的一些问题似乎在这一点上产生了一些混乱。

我已经尝试过的

routes.MapRoute(
    name: "LegacyBarUrl",
    url:  "foo/bar.asp",
    defaults: new { controller = "InboundLinks", action = "HandleBar" }
);
Run Code Online (Sandbox Code Playgroud)

但这会返回404 Not Found错误。

环境

Visual Studio 2013 在 Windows 7 上以本地开发模式运行。部署将到我无法控制的锁定服务器上的 IIS 7,因此遗憾的是,无法在服务器上安装 HTTP 模块。域名将保持不变。

预先非常感谢您的任何帮助/指导/等。

A. *_*ora 1

你所尝试过的一定有效。确保它位于路由配置的顶部,并且默认路由位于其后面

public static void RegisterRoutes(RouteCollection routes)
{
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     routes.MapRoute(
            name: "LegacyBarUrl",
            url:  "foo/bar.asp",
            defaults: new { controller = "InboundLinks", action = "HandleBar" }
            namespaces: new[] { "YourProject.Controllers" }
     );

     routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "YourProject.Controllers" }
     );
}
Run Code Online (Sandbox Code Playgroud)

编辑:

好吧,我自己也试过了,确实不行。所以你有两个选择:

(1) 在以下IIS级别捕获并路由您的请求:如果您采用此路径,此扩展可能会非常有帮助: http: //www.iis.net/downloads/microsoft/url-rewrite]

(2) 在 MVC 查找路由表之前编写自己的RouteBase并重定向遗留路由:如果您采用此路径,这篇文章将对您非常有帮助(在这里编写代码会太长):http://www .mikesdotnetting.com/article/108/handling-legacy-urls-with-asp-net-mvc