En el inicio, configuré mi IFileProvider en los servicios de configuración de la siguiente manera:
IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString()); services.AddSingleton<IFileProvider>(physicalProvider);Ahora, cuando voy a usar para encontrar la fecha de última modificación de los archivos en mi controlador, obtengo la fecha 01/01/0001 para todos los archivos. Mi código es el siguiente:
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; }Después de usar la inyección de dependencia para usar el proveedor de archivos, uso el siguiente código en mi solicitud de publicación
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); }¿Alguna idea sobre esto? En mi inicio, también uso la inyección de dependencia para asegurarme de que estoy usando la misma variable env que mi controlador para que los directorios se alineen. Básicamente es una carpeta fuera de mi carpeta raíz, ya que es un poco más segura y la uso para un webdav cuando realmente implemento esto.
Uso el siguiente código y obtengo el valor de LastModified ;
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles"); IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");Resultado de la prueba
Consejos: debajo del código solo para prueba, por favor no lo use directamente en su entorno de producción.
1. Método de prueba
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. Método ConfigureServices
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. Método de configuración
app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "ARMSFiles")), RequestPath = "/ARMSFiles" });