首页 > 解决方案 > 有没有办法从 ASP.NET Core IFileProvider 类中检索 HttpContext?

问题描述

我正在尝试从 中获取 的实例HttpContextIFileProvider因此我可以访问在子路径中更新路由映射之前请求的原始路径。

我正在尝试从数据库动态读取视图的示例,但是由于路径始终映射到主控制器,并且缓存的视图我无法访问原始请求路径以从数据库加载正确的视图。我可以让它工作的唯一方法是对映射进行硬核,并分别使用不同的控制器或操作来处理每个文件,但是它不会使用数据库中的动态视图。

public class DBViewProvider : IFileProvider {

    public IDirectoryContents GetDirectoryContents(string subpath) {
        string path = ConvertPath(subpath);

        return new DBViewDirectoryContents(path);
    }

标签: c#asp.net-coreroutinghttpcontext

解决方案


依赖注入将帮助您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();

推荐阅读