gpt4 book ai didi

c# - 路径存在的 MVC 路由

转载 作者:太空狗 更新时间:2023-10-29 17:42:26 24 4
gpt4 key购买 nike

我正在尝试创建一条路线,该路线将标题为

http://mysite.com/tech/

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

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

我希望它改用我的路线,让我提供我的观点。有什么最佳做法吗?

更新:我尝试使用 RouteExistingFiles = true,这使这项工作有效,但后来我遇到了这些目录中存在的文件的问题。 (例如:http://mysite.com/tech/image.jpg)。我开始为我想要忽略的所有各种文件类型(即 .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());

关于c# - 路径存在的 MVC 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com