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


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

  • 相关阅读:
    eclipse开发环境搭建
    如何在不知道密码的情况下卸载趋势防毒墙网络版
    PB 将游标中的数据存到数组中
    SQL Server 系统表使用举例
    row_number() over(partition by a order by b desc) rn 用法
    C#选中当前一行,判断是否为空(顺序)
    C#DataTable与Grid的差别
    C#采番的前端与SQL的写法
    Grid的check
    Combox的去重方法
  • 原文地址:https://www.cnblogs.com/juanheqiao/p/14203236.html
Copyright © 2020-2023  润新知