【问题标题】:Replace older get URL with Route in MVC [duplicate]用 MVC 中的路由替换旧的获取 URL [重复]
【发布时间】: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 页面的请求? 有谁知道如何阻止这种情况发生?

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

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

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

但是这个映射应该已经存在,所以您可能想要区分“旧”路线,所以这样做:

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

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2011-02-22
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多