39 votes

Réglage index.html comme page par défaut dans asp.net de base

Comment puis-je obtenir asp.net de base pour servir index.html fichier à partir de l'intérieur de mon wwwroot?

La raison pour laquelle je veux faire, c'est parce que j'ai un développement angulaire 4 application à l'aide de l'angle de la CLI et il prend soin de l'ensemble du processus de construction. J'ai mis à construire dans le répertoire wwwroot de mon asp.net projet de base, mais asp.net de base ne veut pas de la servir.

J'ai d'abord essayé de retourner le fichier html par l'intermédiaire d'un contrôleur. J'ai essayé cet itinéraire:

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 a renvoyé une erreur 404 non trouvé exception et a donné le chemin, mais le chemin qu'il a donné le chemin d'accès correct à l'index.html fichier (je l'ai coupé et collé dans l'explorateur et le fichier ouvert).

Je suis également déclarer ces dans de démarrage:

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

J'ai ensuite essayé de supprimer la route par défaut. Maintenant, je suis en mesure d'obtenir à la index.html fichiers, 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 l' "index.html" spécifiée j'ai une erreur 404.

Quelle est la méthode appropriée pour faire référence à la index.html comme la page par défaut? Je devine le faire à partir d'un contrôleur est probablement mieux, car alors il sera compatible avec angulaire de routage sans réécrit.

63voto

Chris Halcrow Points 907

Il suffit d'utiliser cette en startup.cs:

app.UseFileServer();

C'est un raccourci pour:

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

... et il évite les problèmes avec le fait d'avoir d'avoir les dans le bon ordre

34voto

Guerrilla Points 2609

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

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

9voto

Sachin Joseph Points 792

Installer 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 des fichiers servi de wwwroot répertoire (utiliser UseWebRoot si vous voulez le changer pour quelque chose d'autre).

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

-2voto

satty Points 1

Vous êtes le mélange des deux MVC et de fichiers par Défaut de servir (useDefaultFiles). Commentez les lignes ci-dessous à partir de votre code

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

et d'utiliser seulement app.UseDefaultFiles();. Il va commencer à travailler.

-7voto

Evan Bor Points 7
return File(System.IO.File.OpenRead(Path.Combine(HostingEnvironment.WebRootPath + "/index.html")), "text/html");

Il a à l'aide d'u

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X