public static IEndpointRouteBuilder UseBlocklyAutomation(this IEndpointRouteBuilder endpoints) { //endpoints.MapFallbackToFile("BlocklyAutomation/{**:nonfile}", "BlocklyAutomation/index.html"); endpoints.Map("BlocklyAutomation/{**:nonfile}", async ctx => { var dir = FileProvider.GetDirectoryContents("BlocklyAutomation").ToArray(); var file = dir.Where(it => it?.Name?.ToLower() == "index.html").FirstOrDefault(); var response = ctx.Response; response.ContentType = contentFromExtension(file.Name); //in net 6 use sendfileasync using (var fileContent = file.CreateReadStream()) { await StreamCopyOperation.CopyToAsync(fileContent, response.Body, file.Length, CancellationToken.None); } }); return(endpoints); }
private void GetFileInfosRecursive(string root, List <RelativeFileInfo> razorFiles) { var fileInfos = FileProvider.GetDirectoryContents(root); foreach (var fileInfo in fileInfos) { if (fileInfo.IsDirectory) { var subPath = CombinePath(root, fileInfo.Name); GetFileInfosRecursive(subPath, razorFiles); } else if (Path.GetExtension(fileInfo.Name) .Equals(FileExtension, StringComparison.OrdinalIgnoreCase)) { var relativePath = CombinePath(root, fileInfo.Name); var info = new RelativeFileInfo(fileInfo, relativePath); razorFiles.Add(info); } } }