IFileProvider 为 Physical Provider 中所有文件的最后修改日期返回 01/01/0001

IFileProvider returning 01/01/0001 for last modified date of all files in Physical Provider

在启动时,我在配置服务中设置了我的 IFileProvider,如下所示:

            IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
        services.AddSingleton<IFileProvider>(physicalProvider);

现在,当我去使用在我的控制器中查找文件的最后修改日期时,我得到所有文件的日期 01/01/0001。我的代码如下:

    private readonly IWebHostEnvironment env;
    private IFileProvider _fileProvider;
    public IConfiguration Configuration { get; }

    public MainReviewController(LoginDBContext context, IConfiguration configuration, IWebHostEnvironment env, IFileProvider fileProvider)
    {
        _context = context;
        connectionString = configuration["ConnectionStrings:DBContext"];
        this.env = env;
        _fileProvider = fileProvider;
    }

在我使用依赖注入来使用文件提供程序后,我在 post 请求中使用了以下代码

                    var rootPath = Path.Combine(Directory.GetParent(env.ContentRootPath).ToString(), "ARMSFiles");

                foreach (var file in mainreviewdocuments)
                {
                    var filePath = Path.Combine(rootPath, file.DOCUMENT_FULL_PATH);
                    System.Diagnostics.Debug.WriteLine(filePath);
                    System.Diagnostics.Debug.WriteLine(_fileProvider.GetFileInfo(filePath).LastModified);
                }

对此有什么想法吗?在我的启动中,我也使用依赖注入来确保我使用与我的控制器相同的环境变量,因此目录应该对齐。它基本上是我的根文件夹之外的一个文件夹,因为它更安全一些,我在实际部署它时将它用于 webdav。

我使用下面的代码,得到 LastModified;

的值
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");

测试结果

测试代码:

提示:以下代码仅供测试,请不要直接在生产环境中使用。

1。测试方法

public IActionResult TestFileProvider()
{
    // the static root path, just for test
    string filePath = @"D:\M***e\F***e\TestCookie\ARMSFiles\TextFile.txt";

    IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
    IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");
    System.Diagnostics.Debug.WriteLine(filePath);
    System.Diagnostics.Debug.WriteLine(fileInfo.LastModified);
    return Ok(fileInfo.LastModified);
}

2。配置服务方法

public void ConfigureServices(IServiceCollection services)
{
    //IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
    var physicalProvider = _env.ContentRootFileProvider;
    var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
    var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
    services.AddSingleton<IFileProvider>(compositeProvider);
    ...
    services.AddControllersWithViews();

}

3。配置方法

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), "ARMSFiles")),
        RequestPath = "/ARMSFiles"
    });