将经典ASP与MVC混合 - 具有相同路径的问题

时间:2016-05-18 16:40:40

标签: c# asp.net-mvc asp-classic routing

我们正在慢慢尝试从我们的经典asp页面迁移到mvc视图,但我遇到了一个我正在努力解决的问题!

我们想保持相同的url结构,所以我创建了一个指向同一个url的控制器/动作,但是这被忽略了,asp文件总是优先。

示例:

我有文件夹结构:成人\ policies \ index.asp 以及名为成人的MVC控制器,其操作名为政策

当我浏览网址时: .. co.uk \ adult \ policies

我希望浏览器转到我的新控制器操作方法,但它总是转到经典的asp文件位置。

如果我尝试将index.asp重命名为其他东西,我将获得权限错误(因此它仍然尝试使用经典的asp路径而不是MVC控制器动作)。

我花了好几个小时尝试使用路由,但我似乎无法让它工作。重要的是我们保持相同的url结构,所以我不能给我的控制器/操作一个替代名称来解决它。

有人可以帮忙吗?

谢谢!

编辑:

我已经能够使用带有一些正则表达式的重写模块来使其工作,然后在末尾附加单词“/ index”,然后使其进入mvc视图。

我不知道使用哪种模式来忽略末尾有扩展名的网址,例如.asp / .jpeg等因为网址变成了/adults/policies/test.asp/index

到目前为止,我已经包含了这种模式:

/([^:/ \ S] +)((/ \ W +)的 /)([\ W - ] + [?^#\ S] +)(。) ?(#[\ W - ] +)?$

从这里采取:http://www.regextester.com/20

任何人都可以提供帮助,以便在最后有一个。*的网址时,这个重写模块不会启动吗?

1 个答案:

答案 0 :(得分:1)

根据本文https://www.simple-talk.com/dotnet/asp.net/mixing-web-forms-and-asp.net-mvc/,您需要确保您的MVC路由具有为此控制器/操作定义的路由。

因此,请确保您没有在RouteConfig.cs文件中的RegisterRoutes(RouteCollection routes)函数中定义的规则,该规则将忽略该路由。

//Do not route requests for /adults/policies/any/additional/path
routes.IgnoreRoute("adults/policies/");
//Do not route for adults/policies/any/additional/path?withquerystring=true
routes.IgnoreRoute("adults/policies/{*pathInfo}");

另外,请确保你的内容中有这样的东西。 RouteConfig.cs文件中的RegisterRoutes(RouteCollection routes)函数

routes.MapRoute(
    "Adult Policies",
    "adults\policies\index.asp"
    new { controller = "MyController", action = "MyAction"}
);

不幸的是,如果不是不可能的话,创建一个能够捕获你想要以这种方式路由的所有.asp页面的路由是非常困难的,因为正如你在评论中提到的那样,该文件夹中还有其他的asp文件你仍然想要提供服务。这意味着每次更换其中一个页面时,您都必须创建这样的路径,直到您更换了所有页面,在这种情况下,该控制器的全部捕获很简单。

另一个选项是为该文件夹中的所有当前asp页面创建一个非常特定的忽略规则,并在将它们转换为操作时逐个删除它们。当然,定义了一个非常宽泛的路由,它将捕获该文件夹的所有请求。