C# 尝试从数据库加载视图时,未调用我的路由

C# 尝试从数据库加载视图时,未调用我的路由,c#,asp.net-mvc,asp.net-routing,C#,Asp.net Mvc,Asp.net Routing,尝试按照以下简单示例从数据库加载视图: 问题是,一旦我注册了VirtualPathProdvider,我的路由就不再被调用 这是我的路线配置: routes.MapRoute( "order", // Route name "order/{manufacturerid}/{id}/{viewname}/{orderGuid}/{type}", // URL with parameters new

尝试按照以下简单示例从数据库加载视图:

问题是,一旦我注册了VirtualPathProdvider,我的路由就不再被调用

这是我的路线配置:

  routes.MapRoute(
                "order", // Route name
                "order/{manufacturerid}/{id}/{viewname}/{orderGuid}/{type}", // URL with parameters
                new { controller = "Receipts", action = "order", viewname = "", manufacturerid = "", type = "", orderGuid = "", id = UrlParameter.Optional } // Parameter defaults
               );
我知道这一点,因为一旦我注册了VirtualPathProvider,我就再也看不到我在ActionResult上设置的断点了

相反,我得到了一个404错误

这是我的
VirtualPathProvider

public class DatabaseVirtualPathProvider : VirtualPathProvider
    {
        private readonly Utility.Templates.Interfaces.ITemplateService templateService;

        public DatabaseVirtualPathProvider()
        {
            this.templateService = new Utility.Templates.TemplateService(new Utility.Templates.DataAccess.TemplateRepository());
        }

        public override bool FileExists(string virtualPath)
        {
            var view = GetViewFromDatabase(virtualPath);

            if (view == null)
            {
                return base.FileExists(virtualPath);
            }
            else
            {
                return true;
            }
        }

        public override VirtualFile GetFile(string virtualPath)
        {
            var view = GetViewFromDatabase(virtualPath);

            if (view == null)
            {
                return base.GetFile(virtualPath);
            }
            else
            {
                byte[] content = ASCIIEncoding.ASCII.GetBytes(view.TemplateContent);

                return new DatabaseVirtualFile(virtualPath, content);
            }
        }

        public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
        {
            return null;
        }

        private Utility.Templates.Models.Template GetViewFromDatabase(string virtualPath)
        {

            var paths = virtualPath.Split('/');
            if (paths.Length < 3) return null;

            var templateName = paths[4];
            var template = templateService.GetByName(Utility.Templates.Models.Enums.TemplateType.Order, templateName);
            return template;
        }
    }
公共类数据库VirtualPathProvider:VirtualPathProvider { 私有只读实用程序.Templates.Interfaces.ITemplateService templateService; 公共数据库VirtualPathProvider() { this.templateService=new Utility.Templates.templateService(new Utility.Templates.DataAccess.TemplateRepository()); } 公共覆盖布尔文件存在(字符串virtualPath) { var view=GetViewFromDatabase(virtualPath); 如果(视图==null) { 返回base.FileExists(virtualPath); } 其他的 { 返回true; } } 公共重写VirtualFile GetFile(字符串virtualPath) { var view=GetViewFromDatabase(virtualPath); 如果(视图==null) { 返回base.GetFile(virtualPath); } 其他的 { byte[]content=ascienceoding.ASCII.GetBytes(view.TemplateContent); 返回新的数据库VirtualFile(virtualPath,content); } } 公共重写CacheDependency GetCacheDependency(字符串virtualPath、IEnumerable virtualPath Dependencies、DateTime utcStart) { 返回null; } private Utility.Templates.Models.Template GetViewFromDatabase(字符串virtualPath) { var path=virtualPath.Split('/'); if(path.Length<3)返回null; var templateName=路径[4]; var template=templateService.GetByName(Utility.Templates.Models.Enums.TemplateType.Order,templateName); 返回模板; } }
FileExists
确实会在我的
VirtualpathProvider
上被调用,而且我确实从数据库中获得了所需的模板,但我的路由似乎被跳过,而且
GetFile
从未被调用。

是在
global.asax.cs
中注册路由之前注册的
VirtualpathProvider
吗?这是第一个我试过的东西,之前,之后,都没什么区别,我还是得到了404。FileExists确实会被调用,并且我确实从数据库中获得了所需的模板,但我的路由似乎被跳过。请使用参数检查虚拟路径的形成是否正确虚拟路径的形成是否正确