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



我正在尝试使用FileProvider扩展,使用Kestrel部署具有.NET CoreAngular 7应用程序。

我已经创建了angular应用程序,我有ng build,我复制了dist.NETPoroject中的文件。

启动

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();
}

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

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

但如果你只想提供静态文件,你可以做如下:

  1. 使用FileProviderRequestPath配置DefaultFilesOptions
var fileProvider=新的PhysicalFileProvider(isDev?debugRoot:prodRoot(;DefaultFilesOptions options=新的DefaultFilesOptions(({RequestPath="/app",//处理对`/app的请求`FileProvider=FileProvider,//检查`myroot下的文件/**/**`DefaultFileNames=new List{"index.html"},};options.DefaultFileNames.Clear((options.DefaultFileNames.Add("/myroot/index.html"(app.UseDefaultFiles(选项(;//提供静态文件应用程序。UseStaticFiles((;应用程序。使用StaticFiles(新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="">
  • 或删除该行

相关内容

  • 没有找到相关文章

最新更新