IApplicationBuilderExtensions_UseStaticFiles.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.Extensions.FileProviders;
  3. using Vit.WebHost;
  4. namespace Vit.Extensions
  5. {
  6. public static class IApplicationBuilderExtensions_UseStaticFiles
  7. {
  8. public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder data, StaticFilesConfig config)
  9. {
  10. if (config == null || data == null) return data;
  11. #region (x.1)UseStaticFiles
  12. var staticfileOptions = new StaticFileOptions();
  13. //(x.x.1)requestPath
  14. if (!string.IsNullOrEmpty(config.requestPath))
  15. {
  16. staticfileOptions.RequestPath = new Microsoft.AspNetCore.Http.PathString(config.requestPath);
  17. }
  18. //(x.x.2)FileProvider
  19. if (!string.IsNullOrWhiteSpace(config.rootPath))
  20. {
  21. staticfileOptions.FileProvider = new PhysicalFileProvider(config.rootPath);
  22. }
  23. //(x.x.3)OnInitStaticFileOptions
  24. config.OnInitStaticFileOptions?.Invoke(staticfileOptions);
  25. #region (x.x.4)Response Headers
  26. if (config.responseHeaders != null)
  27. {
  28. staticfileOptions.OnPrepareResponse +=
  29. ctx =>
  30. {
  31. var Headers = ctx.Context.Response.Headers;
  32. foreach (var kv in config.responseHeaders)
  33. {
  34. Headers[kv.Key] = kv.Value;
  35. }
  36. };
  37. }
  38. #endregion
  39. //(x.x.5)contentTypeProvider
  40. if (config.contentTypeProvider != null)
  41. {
  42. staticfileOptions.ContentTypeProvider = config.contentTypeProvider;
  43. }
  44. //(x.x.6)UseDefaultFiles
  45. if (config.defaultFileNames != null)
  46. {
  47. data.UseDefaultFiles(new DefaultFilesOptions
  48. {
  49. DefaultFileNames = config.defaultFileNames
  50. });
  51. }
  52. //(x.x.7)UseStaticFiles
  53. data.UseStaticFiles(staticfileOptions);
  54. #endregion
  55. //(x.2)UseDirectoryBrowser
  56. if (config.useDirectoryBrowser == true)
  57. {
  58. var options = new DirectoryBrowserOptions {
  59. FileProvider = staticfileOptions.FileProvider,
  60. RequestPath = staticfileOptions.RequestPath
  61. };
  62. data.UseDirectoryBrowser(options);
  63. }
  64. return data;
  65. }
  66. }
  67. }