IApplicationBuilderExtensions_UseStaticFiles.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.Extensions.FileProviders;
  3. using System.IO;
  4. using Vit.Core.Util.Common;
  5. using Vit.WebHost;
  6. namespace Vit.Extensions
  7. {
  8. public static class IApplicationBuilderExtensions_UseStaticFiles
  9. {
  10. public static IApplicationBuilder UseStaticFilesFromConfig(this IApplicationBuilder data, string configPath = "server.staticFiles")
  11. {
  12. //配置静态文件
  13. return data.UseStaticFiles(Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath<Vit.WebHost.StaticFilesConfig>(configPath));
  14. }
  15. public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder data, StaticFilesConfig config)
  16. {
  17. if (config == null || data == null) return data;
  18. #region (x.1)UseStaticFiles
  19. var staticfileOptions = new StaticFileOptions();
  20. //(x.x.1)requestPath
  21. if (!string.IsNullOrEmpty(config.requestPath))
  22. {
  23. staticfileOptions.RequestPath = new Microsoft.AspNetCore.Http.PathString(config.requestPath);
  24. }
  25. #region (x.x.2)FileProvider
  26. IFileProvider fileProvider=null;
  27. string rootPath;
  28. if (!string.IsNullOrWhiteSpace(rootPath=config.rootPath) && Directory.Exists(rootPath))
  29. {
  30. fileProvider = new PhysicalFileProvider(rootPath);
  31. }
  32. else if (Directory.Exists(rootPath = CommonHelp.GetAbsPath("wwwroot")))
  33. {
  34. fileProvider = new PhysicalFileProvider(rootPath);
  35. }
  36. else
  37. {
  38. var dir = new DirectoryInfo("wwwroot");
  39. if(dir.Exists)
  40. fileProvider = new PhysicalFileProvider(dir.FullName);
  41. }
  42. staticfileOptions.FileProvider = fileProvider;
  43. #endregion
  44. //(x.x.3)OnInitStaticFileOptions
  45. config.OnInitStaticFileOptions?.Invoke(staticfileOptions);
  46. #region (x.x.4)Response Headers
  47. if (config.responseHeaders != null)
  48. {
  49. staticfileOptions.OnPrepareResponse +=
  50. ctx =>
  51. {
  52. var Headers = ctx.Context.Response.Headers;
  53. foreach (var kv in config.responseHeaders)
  54. {
  55. Headers[kv.Key] = kv.Value;
  56. }
  57. };
  58. }
  59. #endregion
  60. //(x.x.5)contentTypeProvider
  61. if (config.contentTypeProvider != null)
  62. {
  63. staticfileOptions.ContentTypeProvider = config.contentTypeProvider;
  64. }
  65. //(x.x.6)UseDefaultFiles
  66. if (config.defaultFileNames != null)
  67. {
  68. data.UseDefaultFiles(new DefaultFilesOptions
  69. {
  70. DefaultFileNames = config.defaultFileNames,
  71. FileProvider= fileProvider
  72. });
  73. }
  74. //(x.x.7)UseStaticFiles
  75. data.UseStaticFiles(staticfileOptions);
  76. #endregion
  77. //(x.2)UseDirectoryBrowser
  78. if (config.useDirectoryBrowser == true)
  79. {
  80. var options = new DirectoryBrowserOptions {
  81. RequestPath = staticfileOptions.RequestPath,
  82. FileProvider = fileProvider
  83. };
  84. data.UseDirectoryBrowser(options);
  85. }
  86. return data;
  87. }
  88. }
  89. }