To use static (html) files in a NUGET ASP.NET Core package to be displayed I have used the following solution
1. Put the files in a folder ( in my case,blocklyAutomation )
2. Put in the .csproj to embed the files
<ItemGroup>
<EmbeddedResource Include=”BlocklyAutomation\**\*”>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
3. Create an extension to use it
;
public static void UseBlocklyUI(this IApplicationBuilder appBuilder) { var manifestEmbeddedProvider = new ManifestEmbeddedFileProvider(Assembly.GetExecutingAssembly()); var service = appBuilder.ApplicationServices; mapFile("blocklyAutomation",manifestEmbeddedProvider,appBuilder); } private static void mapFile(string dirName,IFileProvider provider,IApplicationBuilder appBuilder) { var folder = provider.GetDirectoryContents(dirName); foreach (var item in folder) { if (item.IsDirectory) { mapFile(dirName + "/" + item.Name,provider,appBuilder); continue; } string map = (dirName + "/" + item.Name).Substring(dirName.Length); appBuilder.Map(map,app => { var f = item; app.Run(async cnt => { //TODO: find from extension //cnt.Response.ContentType = "text/html"; using var stream = new MemoryStream(); using var cs = f.CreateReadStream(); byte[] buffer = new byte[2048]; // read in chunks of 2KB int bytesRead; while ((bytesRead = cs.Read(buffer,0,buffer.Length)) > 0) { stream.Write(buffer,0,bytesRead); } byte[] result = stream.ToArray(); var m = new Memory<byte>(result); await cnt.Response.BodyWriter.WriteAsync(m); }); }); } }
4. That is all
Leave a Reply