web-dev-qa-db-fra.com

Définition de index.html comme page par défaut dans le noyau asp.net

Comment puis-je obtenir que asp.net core serve un fichier index.html à partir de mon wwwroot?

La raison pour laquelle je veux faire cela est parce que je développe un angular 4 en utilisant le angular CLI) et il prend en charge l'ensemble du processus de construction. J'ai configurez-le pour qu'il soit intégré au répertoire wwwroot de mon projet principal asp.net, mais asp.net ne veut pas le servir.

Au début, j'ai essayé de renvoyer le fichier html via un contrôleur. J'ai essayé cette voie:

app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}");
    });

Et puis dans le contrôleur je retourne le fichier html comme ceci:

public IActionResult Index()
{
    var webRoot = _env.WebRootPath;
    var path = System.IO.Path.Combine(webRoot, "index.html");

    return File(path, "text/html");
}

Cela n'a pas fonctionné. Il renvoyait une exception 404 non trouvée et donnait le chemin, mais le chemin qu'il donnait était le chemin correct vers le fichier index.html (je l'ai coupé et collé dans l'explorateur et le fichier ouvert).

Je déclare également ceux-ci au démarrage:

app.UseStaticFiles();
app.UseDefaultFiles();

J'ai ensuite essayé de supprimer la route par défaut. Maintenant, je peux accéder au fichier index.html, mais seulement si je tape le nom du fichier, c'est-à-dire:

localhost: 58420/index.html

Si j'essaie d'accéder à la racine du domaine sans le "index.html" spécifié, j'obtiens une erreur 404.

Quelle est la bonne façon de référencer le fichier index.html comme page par défaut? Je suppose que le faire à partir d'un contrôleur est probablement préférable, car il sera alors compatible avec le routage angular sans réécriture).

26
Guerrilla

Il suffit d'utiliser ceci dans startup.cs:

app.UseFileServer();

C'est un raccourci pour:

app.UseDefaultFiles();
app.UseStaticFiles();

... et cela évite les problèmes d'avoir à les avoir dans le bon ordre (comme indiqué ci-dessus)

31
Chris Halcrow

J'avais besoin de déclarer UseDefaultFiles () avant UseStaticFiles ().

app.UseDefaultFiles();
app.UseStaticFiles();
32
Guerrilla

Installez le package NuGet (Microsoft.AspNetCore.StaticFiles .

Maintenant en Startup.Configure méthode, ajouter:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Serve the files Default.htm, default.html, Index.htm, Index.html
    // by default (in that order), i.e., without having to explicitly qualify the URL.
    // For example, if your endpoint is http://localhost:3012/ and wwwroot directory
    // has Index.html, then Index.html will be served when someone hits
    // http://localhost:3012/
    app.UseDefaultFiles(); 

    // Enable static files to be served. This would allow html, images, etc. in wwwroot
    // directory to be served. 
    app.UseStaticFiles();
}

Vous devriez maintenant obtenir les fichiers servis à partir du répertoire wwwroot (utilisez UseWebRoot si vous voulez le remplacer par autre chose).

Source: https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/static-files

6
Sachin Joseph
app.UseDefaultFiles(new DefaultFilesOptions {
    DefaultFileNames = new List<string> { "index.html" }
});
app.UseStaticFiles();

Ceci est optimal car le graveur d'URL UseDefaultFiles ne cherchera que index.html, Et non les fichiers hérités: default.htm, default.html Et index.htm.

https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-2.2#serve-a-default-document

0
KTCO