从spa文件夹提供静态index.html

时间:2020-04-24 16:12:11

标签: vue.js asp.net-core single-page-application static-files

我使用.netcore服务器端和vuejs 2。

我为vuejs的某些路由生成了html文件,这些文件直接放置在find({'orderLine.trackingNumber' : { $regex: "^12345.*"} })** 文件夹中:

enter image description here

我可以使用dist访问html文件,但调用http://my-domain/en/home/index.html(不使用http://my-domain/en/home)将无法提供html文件。相反,它将返回等效的spa页面。

该如何解决?我希望服务器优先返回html文件,否则返回正常的spa网站。

这是我的startup.cs的一部分:

index.html

编辑:除了@Phil的回复之外,我还需要提供一个FileProvider,因为public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); // ... // In production, the vue files will be served from this directory services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/dist"; }); // ... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... // WebRootPath == null workaround. - from https://github.com/aspnet/Mvc/issues/6688 if (string.IsNullOrWhiteSpace(env.WebRootPath)) { env.WebRootPath = Path.Combine(Directory.GetCurrentDirectory(), "ClientApp", "dist"); } app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { const int durationInSeconds = 60 * 60 * 24; ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public,max-age=" + durationInSeconds; } }); app.UseSpaStaticFiles(); // ... app.UseSpa(spa => { spa.Options.SourcePath = "ClientApp"; if (env.IsDevelopment()) { spa.UseVueCli(npmScript: "serve", port: 8085); } }); } 不在正确的文件夹中

UseDefaultFiles

1 个答案:

答案 0 :(得分:2)

您需要告诉服务器使用Default Files

使用UseDefaultFiles,请求文件夹搜索:

default.htm
default.html
index.htm
index.html

app.UseDefaultFiles(); // this must come first
app.UseStaticFiles(...

这基本上为文件夹(例如您的en/home)上的请求设置了一个拦截器,如果找到上述任何文件名,则会将URL重写为folder/path/{FoundFilename}

如果要避免搜索除index.html以外的任何内容,可以对其进行自定义

DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("index.html");
app.UseDefaultFiles(options);

请注意有关订购的重要信息

重要

必须在UseDefaultFiles之前调用

UseStaticFiles才能提供默认文件。 UseDefaultFiles是实际上不为文件提供服务的URL重写器。通过UseStaticFiles启用静态文件中间件来提供文件。