【问题标题】:Is there a way to retrieve HttpContext from ASP.NET Core IFileProvider class?有没有办法从 ASP.NET Core IFileProvider 类中检索 HttpContext?
【发布时间】:2019-06-10 07:04:11
【问题描述】:

我正在尝试从IFileProvider 中获取HttpContext 的实例,这样我就可以访问在子路径中更新路由映射之前请求的原始路径。

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

public class DBViewProvider : IFileProvider {

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

        return new DBViewDirectoryContents(path);
    }

【问题讨论】:

    标签: c# asp.net-core routing httpcontext


    【解决方案1】:

    依赖注入会帮你在构造函数中注入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();
    

    【讨论】:

    • 但是如何注册文件提供者呢? ``` services.Configure(options => { options.FileProviders.Add(new DBViewProvider(??)) ; }); ```
    • 这不是 OP 问题,但以下链接可以帮助您 stackoverflow.com/questions/58248182/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多