Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 经典ASP与MVC的混合-路径相同的问题_C#_Asp.net Mvc_Asp Classic_Routing - Fatal编程技术网

C# 经典ASP与MVC的混合-路径相同的问题

C# 经典ASP与MVC的混合-路径相同的问题,c#,asp.net-mvc,asp-classic,routing,C#,Asp.net Mvc,Asp Classic,Routing,我们正在慢慢地尝试从经典的asp页面迁移到mvc视图,但我遇到了一个我正在努力解决的问题 我们希望保持相同的url结构,因此我创建了一个控制器/操作来指向相同的url,但是这被忽略,asp文件始终具有优先权 例如: 我有一个文件夹结构:成人\policies\index.asp 还有一个名为成人的MVC控制器,其操作名为策略 当我浏览到url时:.co.uk\madaments\policies 我希望浏览器转到我的新控制器操作方法,但它总是转到经典的asp文件位置 如果我尝试将index.as

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

我们希望保持相同的url结构,因此我创建了一个控制器/操作来指向相同的url,但是这被忽略,asp文件始终具有优先权

例如:

我有一个文件夹结构:成人\policies\index.asp 还有一个名为成人的MVC控制器,其操作名为策略

当我浏览到url时:.co.uk\madaments\policies

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

如果我尝试将index.asp重命名为其他名称,我将得到一个权限错误(因此它仍在尝试使用经典的asp路径,而不是MVC控制器操作)

我花了好几个小时试着处理路由问题,但似乎无法让它正常工作。重要的是我们保持相同的url结构,这样我就不能给我的控制器/操作一个替代名称来解决它

有人能帮忙吗

谢谢

编辑:

我已经能够使用一个带有正则表达式的重写模块来实现这一点,然后在末尾附加“/index”这个词,然后将其转到mvc视图

我不知道该使用什么模式来忽略末尾带有扩展名的url,例如.asp/.jpeg等,因为url正在变为/maintals/policies/test.asp/index

到目前为止,我已将此模式包括在内:

/([^:/\s]+)(/\w+/)([\w-.]+[^?\s]+)()(?([\w-]+)$

摘自这里:

是否有人能提供帮助,使该重写模块在url末尾带有。*时不会启动?

根据本文,您需要确保您的MVC路由为此控制器/操作定义了路由

因此,请确保在RouteConfig.cs文件的
registerOutes(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}");
另外,确保你的电脑里有这样的东西
registerOutes(RouteCollection路由)
在RouteConfig.cs文件中运行

routes.MapRoute(
    "Adult Policies",
    "adults\policies\index.asp"
    new { controller = "MyController", action = "MyAction"}
);
不幸的是,如果不是不可能的话,创建一个能够捕获您希望以这种方式路由的所有.asp页面的路由将是非常困难的,因为正如您在评论中提到的那样,该文件夹中还有其他asp文件您仍然希望提供。这意味着您每次替换其中一个页面时都必须创建这样的路由,直到您替换了所有页面为止,在这种情况下,该控制器的全面覆盖非常简单


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

您的应用程序池运行的是集成模式还是经典模式?听起来像是遵循了默认路由。您可以通过查看App_Start\RouteConfig.cs文件来查看已设置的路由。我不确定是否可以将经典asp与MVC框架混合使用。您可以尝试为所有旧asp页面定义路由,然后在路由到的操作中加载该asp页面。我首先尝试调用
返回视图(“classic/page.asp”)并从那里开始。不过,根据这些页面的设置方式,我肯定这不会起作用。您是否尝试过使用IIS url重写模块来代替MVC的路由?@Andrew Bonsall将asp与MVC混合使用效果很好,唯一的问题是当我尝试调用一个在同一文件路径中也包含as asp文件的操作时。我不想加载asp页面,而是加载mvc视图。“我想根据你写的内容,你告诉我的是另一种情况。@约翰,已经有了一些重写模块。我将尝试移除这些,看看它们是否导致了问题。希望以前有人遇到过这个问题。我想我必须在routeconfig文件中添加一些东西才能使其正常工作。我尝试了设置
routes.routeeExistingFiles=true有效,但我的所有asp文件将无法加载(404错误)。奇怪的是,如果我调用url:\madaments\policies\index,它就可以正常工作,但我不希望url中出现“index”这个词。谢谢你提供的信息。我恐怕你做这个任务的困难是对的,因为我有子文件(asp文件),我仍然需要网站访问。因此,我决定在我将要更新的特定页面上创建重写模块,即