我的网络应用程序需要让管理员用户从.net core 2 app添加和删除服务文件夹。我找到了一种提供服务文件夹列表的方法,但是一旦配置了应用程序,我找不到动态添加或删除它们的方法。
如何在应用程序中重新运行configure函数?或者,如何在已运行的服务中添加或删除import urllib.request
import time
opener = urllib.request.build_opener(
urllib.request.ProxyHandler(
{'http': 'http://127.0.0.1:9999'}))
start = time.time()
print(opener.open('http://example.com').read())
print ('total time: {0}'.format(time.time()-start))
配置?
UseFileServer()
我正在使用.net core 2.0.0-preview2-final。
答案 0 :(得分:2)
您可能希望根据您的设置动态注入FileServer中间件。
微软的Chris Ross'Github上有一个示例项目:https://github.com/Tratcher/MiddlewareInjector/tree/master/MiddlewareInjector
您必须将上述回购中的MiddlewareInjectorOptions
,MiddlewareInjectorMiddleware
和MiddlewareInjectorExtensions
类添加到您的项目中。
然后,在你的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();
}
}
然后,在任何地方注入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只能注入一个中间件,因此您的代码应为您要提供的每个路径调用UseFileServer()
。
我创建了一个包含所需代码的Gist:https://gist.github.com/michaldudak/4eb6b0b26405543cff4c4f01a51ea869