有没有办法从 ASP.NET Core IFileProvider class 检索 HttpContext?
Is there a way to retrieve HttpContext from ASP.NET Core IFileProvider class?
我正在尝试从 IFileProvider
获取 HttpContext
的实例,因此我可以在子路径中更新路由映射之前访问请求的原始路径。
我正在尝试一个从数据库动态读取视图的示例,但是由于路径总是映射到主控制器,并且缓存的视图我无法访问原始请求路径来加载正确的从数据库中查看。我能让它工作的唯一方法是对映射进行硬核处理,并分别使用不同的控制器或操作来处理每个文件,但这样它就不会使用数据库中的动态视图。
public class DBViewProvider : IFileProvider {
public IDirectoryContents GetDirectoryContents(string subpath) {
string path = ConvertPath(subpath);
return new DBViewDirectoryContents(path);
}
依赖注入将帮助您在构造函数中注入HttpContextAccessor
public class DBViewProvider : IFileProvider {
private readonly IHttpContextAccessor httpContextAccessor;
public DBViewProvider(IHttpContextAccessor httpContextAccessor){
this.httpContextAccessor = httpContextAccessor;
}
public IDirectoryContents GetDirectoryContents(string subpath) {
HttpContext httpContext = httpContextAccessor.HttpContext;
string path = ConvertPath(subpath);
return new DBViewDirectoryContents(path);
}
/*******************hidden for brievety************/
}
您需要像这样在 Startup.ConfigureServices
方法中添加这一行
services.AddHttpContextAccessor();
我正在尝试从 IFileProvider
获取 HttpContext
的实例,因此我可以在子路径中更新路由映射之前访问请求的原始路径。
我正在尝试一个从数据库动态读取视图的示例,但是由于路径总是映射到主控制器,并且缓存的视图我无法访问原始请求路径来加载正确的从数据库中查看。我能让它工作的唯一方法是对映射进行硬核处理,并分别使用不同的控制器或操作来处理每个文件,但这样它就不会使用数据库中的动态视图。
public class DBViewProvider : IFileProvider {
public IDirectoryContents GetDirectoryContents(string subpath) {
string path = ConvertPath(subpath);
return new DBViewDirectoryContents(path);
}
依赖注入将帮助您在构造函数中注入HttpContextAccessor
public class DBViewProvider : IFileProvider {
private readonly IHttpContextAccessor httpContextAccessor;
public DBViewProvider(IHttpContextAccessor httpContextAccessor){
this.httpContextAccessor = httpContextAccessor;
}
public IDirectoryContents GetDirectoryContents(string subpath) {
HttpContext httpContext = httpContextAccessor.HttpContext;
string path = ConvertPath(subpath);
return new DBViewDirectoryContents(path);
}
/*******************hidden for brievety************/
}
您需要像这样在 Startup.ConfigureServices
方法中添加这一行
services.AddHttpContextAccessor();