agular项目打包后在dotnet core Api程序上运行

1、新建一个net core api项目

2、将打包后的文件放在 wwwroot 目录下,没有的话新建一个(我放在了 wwwroot\ClientApp\dist 目录)

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() + @"\wwwroot\ClientApp\dist"; // 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() + @"\wwwroot\ClientApp\dist");
                });


//(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、然后运行即可

posted @ 2020-12-28 19:41  涓河樵  阅读(165)  评论(0编辑  收藏  举报