Bra*_*itz 9 c# asp.net-mvc asp.net-mvc-routing
我正在尝试创建一个标题为url的路由
http://mysite.com/tech/
Run Code Online (Sandbox Code Playgroud)
但我在网站下面还有一个实际目录,即/ tech,其中包含其他静态资源.不是我的设计选择,但我正在将一个旧网站迁移到mvc,并且不想破坏一堆非常旧的链接.
我的路线似乎一直在失败,我可以想到的是服务器看到这个目录,并试图从它提供默认文件......但没有找到,但它失败了.
我希望它能使用我的路线,让我提供我的观点.这方面的最佳做法是什么?
更新:我尝试使用RouteExistingFiles = true,这使得这个工作,但后来我遇到了这些目录中存在的文件的问题.(例如:http://mysite.com/tech/image.jpg).我开始加入IgnoreRoute项的所有,我想忽略(即.jpg文件..)的各种文件类型,但是这变成了大混乱.有必要有更好的方法吗?
The*_*ing 14
您需要将RouteCollections对象的RouteExistingFiles属性设置为true.如果发现冲突,这将使您的路由覆盖物理位置.
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
routes.RouteExistingFiles = true;
Run Code Online (Sandbox Code Playgroud)
要有选择地忽略文件/扩展,您可以使用:
routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢这种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());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2016 次 |
最近记录: |