Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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/2/powershell/11.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# 存在路径的MVC路由_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# 存在路径的MVC路由

C# 存在路径的MVC路由,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我正在尝试创建一个路由,该路由将为url添加标题,如 http://mysite.com/tech/ 但我在站点下还有一个实际目录,即/tech,其中包含其他静态资源。这不是我的设计选择,但我正在将一个旧站点迁移到mvc,不想破坏一堆非常旧的链接 我的路由似乎一直在失败,我能想到的是服务器看到了这个目录,并试图从中提供默认文件。。。但是没有找到,它失败了 我希望它使用我的路线,让我提出我的观点。这方面有什么最佳实践吗 更新: 我尝试使用RouteExistingFiles=true,这使这项功

我正在尝试创建一个路由,该路由将为url添加标题,如

http://mysite.com/tech/
但我在站点下还有一个实际目录,即/tech,其中包含其他静态资源。这不是我的设计选择,但我正在将一个旧站点迁移到mvc,不想破坏一堆非常旧的链接

我的路由似乎一直在失败,我能想到的是服务器看到了这个目录,并试图从中提供默认文件。。。但是没有找到,它失败了

我希望它使用我的路线,让我提出我的观点。这方面有什么最佳实践吗

更新:
我尝试使用RouteExistingFiles=true,这使这项功能得以实现,但随后我遇到了这些目录中存在的文件问题。(例如:)。我开始为我想要忽略的各种文件类型(即.jpg文件…)添加IgnoreRoute条目,但这变成了一团混乱。一定有更好的方法吗?

您需要将RouteCollections对象的RouteExistingFiles属性设置为true。如果发现碰撞,这将使布线覆盖物理位置

routes.MapRoute("Default", "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = "" }
    );
routes.RouteExistingFiles = true;
要选择性地忽略文件/扩展名,可以使用:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });
如果您不喜欢
ignoreRoute
方法,另一种可能会有所帮助的方法是扩展ViewEngine并使用您自己的规则覆盖文件存在实现

public class MyViewEngine : RazorViewEngine
{
    protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
    {
        //Some Logic to check for file
    }
}

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomViewEngine());

我找到了这个并尝试了一下,但我的问题是在这些文件夹中有一堆静态文件,我需要访问它们。因此,我希望在点击/tech时触发路由,但在点击/tech/image1.jpg时提供静态文件。因此,我必须为静态文件类型添加一组ignoreroute条目。。。。如果有帮助的话,你可以有选择地忽略文件扩展名。我不喜欢这种方法,因为它会迫使我添加大量的文件类型列表,如果添加了新类型的文件,将来还需要添加更多的文件。其次,我认为这也会影响性能。没有可能添加默认值的方法。目录中的aspx文件来捕获请求(因为它将在默认文件列表中),并让它将内容返回到视图引擎?那么自定义视图引擎方法如何?我对他们还不太了解,但看起来它可以完成这项工作。在周末多工作之后,仍然没有找到解决方案。。。