C# 尝试从数据库加载视图时,未调用我的路由
尝试按照以下简单示例从数据库加载视图: 问题是,一旦我注册了VirtualPathProdvider,我的路由就不再被调用 这是我的路线配置: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
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确实会被调用,并且我确实从数据库中获得了所需的模板,但我的路由似乎被跳过。请使用参数检查虚拟路径的形成是否正确虚拟路径的形成是否正确