简体   繁体   中英

Specifying default file name for asp.net core static folder

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

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/")
    });

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.

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"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM