gpt4 book ai didi

c# - 启动后添加新的 FileServer 位置(启动后编辑中间件)

转载 作者:行者123 更新时间:2023-11-30 16:43:03 26 4
gpt4 key购买 nike

我的 Web 应用程序需要让管理员用户在 .net core 2 应用程序中添加和删除提供的文件夹。我找到了一种提供服务文件夹列表的方法,但我找不到在配置应用程序后动态添加或删除它们的方法。

如何从应用程序中重新运行配置功能?或者,如何在已运行的服务中添加或删除 UseFileServer() 配置?

public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseDeveloperExceptionPage();
app.UseMvc();

//get these dynamically from the database
var locations = new Dictionary<string, string>{
{@"C:\folder1", "/folder1"},
{@"D:\folder2", "/folder2"}
};
foreach (var kvp in locations)
{
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
kvp.Key
),
RequestPath = new PathString(kvp.Value),
EnableDirectoryBrowsing = true
});
}
}
}

我使用的是 .net core 2.0.0-preview2-final。

最佳答案

您可能希望根据您的设置动态注入(inject) FileServer 中间件。

Microsoft 的 Chris Ross 的 Github 上有一个示例项目:https://github.com/Tratcher/MiddlewareInjector/tree/master/MiddlewareInjector

您必须将上述存储库中的 MiddlewareInjectorOptionsMiddlewareInjectorMiddlewareMiddlewareInjectorExtensions 类添加到您的项目中。

然后,在您的 Startup 类中,将 MiddlewareInjectorOptions 注册为单例(因此它在您的整个应用程序中都可用)并使用 MiddlewareInjector:

public class Startup
{
public void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<MiddlewareInjectorOptions>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDeveloperExceptionPage();

var injectorOptions = app.ApplicationServices.GetService<MiddlewareInjectorOptions>();
app.UseMiddlewareInjector(injectorOptions);
app.UseWelcomePage();
}
}

然后,在任何需要的地方注入(inject) MiddlewareInjectorOptions 并动态配置中间件,如下所示:

public class FileServerConfigurator
{
private readonly MiddlewareInjectorOptions middlewareInjectorOptions;

public FileServerConfigurator(MiddlewareInjectorOptions middlewareInjectorOptions)
{
this.middlewareInjectorOptions = middlewareInjectorOptions;
}

public void SetPath(string requestPath, string physicalPath)
{
var fileProvider = new PhysicalFileProvider(physicalPath);

middlewareInjectorOptions.InjectMiddleware(app =>
{
app.UseFileServer(new FileServerOptions
{
RequestPath = requestPath,
FileProvider = fileProvider,
EnableDirectoryBrowsing = true
});
});
}
}

请注意,此 MiddlewareInjector 只能注入(inject)一个中间件,因此您的代码应为要提供服务的每个路径调用 UseFileServer()

我已经用所需的代码创建了一个 Gist:https://gist.github.com/michaldudak/4eb6b0b26405543cff4c4f01a51ea869

关于c# - 启动后添加新的 FileServer 位置(启动后编辑中间件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com