1、新建一个net core api项目
2、将打包后的文件放在 wwwroot 目录下,没有的话新建一个(我放在了 wwwrootClientAppdist 目录)
3、方式一,添加中间件,代码如下
app.Use(async (context, next) => { // 请求路径 var url = context.Request.Path.Value; // 默认路径重定向到 Angular 初始页 if (url == null || url == "/" || url == "/swagger/index.html") { context.Response.Redirect($"/index.html"); return; } if (!url.Contains(".")) // 此处暂时通过“.”判断是否加载文件 { await next(); return; } var token = context.RequestAborted; var response = context.Response; var fileName = FileHandler.GetFileNameFromUrl(url); // 获取文件名 var suffix = FileHandler.GetSuffixFromFile(fileName); // 获取后缀名 不带“.” var path = url.Replace("/", @""); // http中的“/”转为“”,通过url获得文件的相对路径 var root = Directory.GetCurrentDirectory() + @"wwwrootClientAppdist"; // Angular 文件所在目录的根路径 IFileProvider fileProvider = new PhysicalFileProvider(root); IFileInfo file = fileProvider.GetFileInfo(path); if (!file.Exists) { response.StatusCode = StatusCodes.Status404NotFound; return; } var provider = new FileExtensionContentTypeProvider(); var memis = provider.Mappings.ToArray(); var memi = provider.Mappings["." + suffix]; // 获取文件类型 response.ContentType = memi; response.ContentLength = file.Length; // 文件长度 await response.SendFileAsync(file, token); });
4、方式二,直接使用静态文件中间件
// (1)在 Program.cs 中配置文件所在目录 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseWebRoot(Directory.GetCurrentDirectory() + @"wwwrootClientAppdist"); }); //(2)在 Startup.cs 配置静态文件中间件,以及添加重定向中间件 app.UseStaticFiles(new StaticFileOptions() { RequestPath = "" }); app.Use(async (context, next) => { var path = context.Request.Path.Value; if (path == "" || path == "/") { context.Response.Redirect($"/index.html"); } else { await next(); } });
5、然后运行即可