Вам необходимо установить для свойства RouteExistingFiles вашего объекта RouteCollections значение 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());