Specifying default file name for asp.net core stat

2020-07-13 09:37发布

I currently have a generated index.html, js and other static files living in a folder and I'm marking that folder as a static folder (by adding the following in the Configure method in Startup.cs:

   app.UseDefaultFiles();
   app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new Path.Combine(env.ContentRootPath, @"../build")),
        RequestPath = new PathString("/app/")
    });

Is there a way to set index.html as the default response for this */app route? Because right now localhost:5000/app/ returns a 404 while localhost:5000/app/index.html returns the index.html.

EDIT: I missed to mention that I did try using app.UseDefaultFiles() like mentioned in docs but it does not work for me. The server still returns a 404

3条回答
冷血范
2楼-- · 2020-07-13 10:02

One of the comments in that docs has clarified it:

Kieren_Johnstone Featured May 22, 2017

The section, "Serving a default document" misses some vital information. If you configure your UseStaticFiles to work off a non-root RequestPath, you need to pass the same FileProvider and RequestPath into both UseDefaultFiles and UseStaticFiles, it seems. You can't always just call it as stated in the section.

So that means, you should write something like this to enable your specified folder to provide a default page:

    app.UseDefaultFiles(new DefaultFilesOptions()
    {
        FileProvider = new Path.Combine(env.ContentRootPath, @"../build")),
        RequestPath = new PathString("/app/")
    });
    app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new Path.Combine(env.ContentRootPath, @"../build")),
        RequestPath = new PathString("/app/")
    });
查看更多
Rolldiameter
3楼-- · 2020-07-13 10:08

from documentation:

Setting a default home page gives site visitors a place to start when visiting your site. In order for your Web app to serve a default page without the user having to fully qualify the URI, call the UseDefaultFiles extension method from Startup.Configure as follows.

public void Configure(IApplicationBuilder app)
{
    app.UseDefaultFiles();
    app.UseStaticFiles(); // For the wwwroot folder

    app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), @"build")),
        RequestPath = new PathString("/app")
    });
}

UseDefaultFiles must be called before UseStaticFiles to serve the default file.

查看更多
▲ chillily
4楼-- · 2020-07-13 10:19

Use this:

public void Configure(IApplicationBuilder app)
{
    // Serve my app-specific default file, if present.
    DefaultFilesOptions options = new DefaultFilesOptions();
    options.DefaultFileNames.Clear();
    options.DefaultFileNames.Add("mydefault.html");
    app.UseDefaultFiles(options);
    app.UseStaticFiles();
}

For more details follow this link:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files
and go to section: "Serving a default document"
查看更多
登录 后发表回答