1

我正在尝试使用扩展来部署应用程序Angular 7.NET CoreKestrelFileProvider

我已经创建了 angular 应用程序,我拥有它,并且我在Porject 中ng build复制了文件。dist .NET

启动

 public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        string jsFolderName = "myroot";
        string prodRoot =Path.Combine(AppDomain.CurrentDomain.BaseDirectory,jsFolderName);
        string debugRoot =Path.Combine(Directory.GetCurrentDirectory(),jsFolderName);

        var isDev=env.IsDevelopment();


        DefaultFilesOptions options = new DefaultFilesOptions();
        options.DefaultFileNames.Clear();
        options.DefaultFileNames.Add("/myroot/index.html");
        app.UseDefaultFiles(options);
        app.UseStaticFiles();
        app.UseStaticFiles(new StaticFileOptions() {
            FileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot),
            RequestPath = "/app"
        });
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        } else {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }

PS我的myroot文件夹就在项目的根目录中。我不知道如何提供angular应用程序的第一页(入口点),即index.html.

4

1 回答 1

1

正如@ Simonare在评论中所建议的那样,最好的方法是使用官方的Angular 模板。

但是,如果您只想提供静态文件,您可以执行以下操作:

  1. 配置DefaultFilesOptions和。FileProvider_RequestPath
 
    var fileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot);

    DefaultFilesOptions 选项 = 新的 DefaultFilesOptions(){
        RequestPath = "/app", // 处理对`/app`的请求
        FileProvider = fileProvider, // 检查 `myroot/**/**` 下的文件
        DefaultFileNames = 新列表 { "index.html" },
    };
    options.DefaultFileNames.Clear(); 
    options.DefaultFileNames.Add("/myroot/index.html");
    app.UseDefaultFiles(选项);

    // 提供静态文件
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions() {
        RequestPath = "/app",
        文件提供者 = 文件提供者,
    });
  1. 因为 app 的路径是 https://yourhost:port/app,所以你还需要改变 里面的基本路径index.html,这样浏览器才会加载相对于当前路径的所有资源(例如 js、css、img 文件)。的原始基础/src/index.html/

    <!doctype html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>App</title>
            <base href="/">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="icon" type="image/x-icon" href="favicon.ico">
        </head>
        <body>
            <app-root>Loading...</app-root>
        </body>
    </html>

注意我们需要:

  • 更改<base href="/"><base href="/app">
  • 或将基数更改为空字符串:<base href="">
  • 或删除该行
于 2018-12-19T04:45:17.153 回答