servidor net dotnet asp c# asp.net-core kestrel-http-server

c# - net - kestrel web server



Configuración de index.html como página predeterminada en el núcleo de asp.net (5)

¿Cómo puedo obtener el núcleo de asp.net para servir un archivo index.html desde mi wwwroot?

La razón por la que quiero hacer esto es porque estoy desarrollando una aplicación angular 4 utilizando la CLI angular y se encarga de todo el proceso de construcción. Lo he configurado para integrarlo en el directorio wwwroot de mi proyecto central de asp.net pero el núcleo de asp.net no quiere servirlo.

Al principio intenté devolver el archivo html a través de un controlador. He intentado esta ruta:

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

Y luego en el controlador devuelvo el archivo html como este:

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

Esto no funcionó. Devolvió una excepción 404 no encontrada y dio la ruta pero la ruta que dio fue la ruta correcta al archivo index.html (lo corté y lo pegué en el explorador y abrí el archivo).

También estoy declarando estos en el inicio:

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

Entonces intenté eliminar la ruta por defecto. Ahora puedo acceder al archivo index.html pero solo si escribo el nombre del archivo, es decir:

localhost: 58420 / index.html

Si intento acceder a la raíz del dominio sin el "index.html" especificado, aparece un error 404.

¿Cuál es la forma correcta de hacer referencia al index.html como la página predeterminada? Supongo que hacerlo desde un controlador es probablemente mejor porque entonces será compatible con enrutamiento angular sin reescrituras.


Instale el paquete NuGet Microsoft.AspNetCore.StaticFiles .

Ahora, en el método Startup.Configure , agregue:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // Serve the files Default.htm, default.html, Index.htm, Index.html // by default (in this 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(); }

Ahora debería obtener los archivos que se sirven desde el directorio wwwroot (use UseWebRoot si desea cambiarlo por otra cosa).

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


Necesitaba declarar UseDefaultFiles () antes de UseStaticFiles ().

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


Solo usa esto en startup.cs :

app.UseFileServer();

Es taquigrafía para:

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

... y evita problemas con tener que tenerlos en el orden correcto


Usted está mezclando tanto el servidor MVC como el archivo predeterminado (useDefaultFiles). Comenta las siguientes líneas de tu código

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

y use solo app.UseDefaultFiles(); . Comenzará a funcionar.


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

Tiene que ayudarte