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

问题描述 投票:1回答:1

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

我已经为我的vuejs的某些路由生成了html文件,这些文件直接放置在dist文件夹中:

enter image description here

我可以使用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);
        }
    });
}
vue.js asp.net-core single-page-application static-files
1个回答
0
投票

您需要告诉服务器使用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启用静态文件中间件来提供文件。

© www.soinside.com 2019 - 2024. All rights reserved.