c# - IFileProvider 返回 01/01/0001 作为物理提供程序中所有文件的最后修改日期

标签 c# asp.net-mvc asp.net-core

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

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

现在,当我在 Controller 中查找文件的上次修改日期时,我得到所有文件的日期 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;
    }

使用依赖注入(inject)来使用文件提供程序后,我在发布请求中使用以下代码

                    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);
                }

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

最佳答案

我使用下面的代码,并获取LastModified的值;

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

测试结果

enter image description here

enter image description here

测试代码:

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

<强>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"
    });

关于c# - IFileProvider 返回 01/01/0001 作为物理提供程序中所有文件的最后修改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71506729/

相关文章:

c# - 为什么我的动态样式表 url 在 MVC 中不起作用?

javascript - 如何将参数从 Ajax 函数传递到 Controller 操作?

asp.net-core - 如何将 css、js 或图像文件缓存到 asp.net 核心

c# - modelBuilder.Configurations.Add 和 modelBuilder.Entity onModelCreating

c# - 我应该如何将动态变化的数据存储到服务器缓存中?

javascript - 检查 JValue 字符串在 AngularJS 中是否有值

asp.net-mvc - 使用 VS2010 和 MVC 2 启动 Asp.Net MVC

c# - 如何将本地 IIS 与 .NET Core、C# 6 和 Visual Studio 2015 一起使用?

c# - 更流畅的绘图笔

c# - 在新行中打印字符串 (C#)