C# 存在路径的MVC路由
我正在尝试创建一个路由,该路由将为url添加标题,如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,这使这项功
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文件来捕获请求(因为它将在默认文件列表中),并让它将内容返回到视图引擎?那么自定义视图引擎方法如何?我对他们还不太了解,但看起来它可以完成这项工作。在周末多工作之后,仍然没有找到解决方案。。。