我使用.netcore服务器端和vuejs 2。
我已经为我的vuejs的某些路由生成了html文件,这些文件直接放置在dist
文件夹中:
我可以使用http://my-domain/en/home/index.html
访问html文件,但是调用http://my-domain/en/home
(不带index.html
)将无法投放html文件。相反,它将返回等效的spa页面。
我该如何解决?我希望服务器优先返回html文件,否则返回普通的spa网站。
这里是我的startup.cs的一部分:
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);
}
});
}
您需要告诉服务器使用Default Files
使用
UseDefaultFiles
,请求文件夹搜索:default.htmdefault.html索引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
启用静态文件中间件来提供文件。