Vous pouvez injecter dynamiquement le middleware FileServer en fonction de vos paramètres.
Il est un exemple de projet sur Github Chris Ross Microsoft: https://github.com/Tratcher/MiddlewareInjector/tree/master/MiddlewareInjector
Vous devez ajouter les MiddlewareInjectorOptions
, MiddlewareInjectorMiddleware
et MiddlewareInjectorExtensions
cours de la mise en pension mentionnée ci-dessus à votre projet.
Ensuite, dans votre classe de démarrage, inscrivez-vous le MiddlewareInjectorOptions
comme un singleton (il est disponible dans votre application) et utiliser le 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();
}
}
Ensuite, injecter les MiddlewareInjectorOptions où vous voulez et configurer le middleware dynamique , comme ceci:
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
});
});
}
}
Notez que ce MiddlewareInjector peut injecter un seul middleware, de sorte que votre code doit appeler UseFileServer()
pour chaque chemin que vous voulez servir.
J'ai créé un Contenu essentiel avec le code requis: https://gist.github.com/michaldudak/4eb6b0b26405543cff4c4f01a51ea869
Cela ne résout pas mon problème. Je dois enregistrer les nouveaux emplacements UseFileServer APRES le démarrage. Je l'ai testé, et une fois que l'application est en cours d'exécution, tous les nouveaux appels app.UseFileServer ne font rien. – TwitchBronBron
Ma solution devrait fonctionner, alors. Puisque vous avez un MiddlewareInjectorOptions de singleton, vous pouvez l'utiliser quand vous voulez (il suffit de l'obtenir du conteneur de service). Je l'ai testé moi-même il y a un certain temps et ça semble fonctionner correctement. –
S'il vous plaît jeter un oeil à la Gist que je viens d'ajouter - Au début, il n'y a pas de fonctionnalité de serveur de fichiers. Ce n'est que lorsque vous accédez à l'URL/enable-file-server que vous accédez au contenu des lecteurs C et D en accédant aux URL/c et/d, respectivement. –