如何使用Kestrel托管Angular应用程序

时间:2018-12-18 13:20:42

标签: asp.net-core ng-build fileprovider-extension

我正在尝试使用Angular 7扩展名和使用.NET Core的{​​{1}}来部署Kestrel的应用程序。

我已经创建了角度应用程序,我已经FileProvider了,然后将文件复制到了ng build dist内部。

启动

.NET

PS 我的 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(); } 文件夹就在项目的根目录中。 我不知道该如何填充myroot应用程序angular的首页(入口点)。

1 个答案:

答案 0 :(得分:1)

@@ Simonare在评论中建议,最好的方法是使用正式的Angular模板。

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

  1. 使用DefaultFilesOptionsFileProvider配置RequestPath
 
    var fileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot);

    DefaultFilesOptions options = new DefaultFilesOptions(){
        RequestPath = "/app",           // to process request to `/app`
        FileProvider = fileProvider,    // to check files under `myroot/**/**`
        DefaultFileNames = new List { "index.html" },
    };
    options.DefaultFileNames.Clear();
    options.DefaultFileNames.Add("/myroot/index.html");
    app.UseDefaultFiles(options);

    // serve static files 
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions() {
        RequestPath = "/app",
        FileProvider = fileProvider,
    });
  1. 由于应用的路径为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="">
  • 或删除该行