我使用.netcore服务器端和vuejs 2。
我为vuejs的某些路由生成了html文件,这些文件直接放置在find({'orderLine.trackingNumber' : { $regex: "^12345.*"} })**
文件夹中:
我可以使用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
答案 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
启用静态文件中间件来提供文件。