将index.html设置为asp.net核心

时间:2017-03-29 10:18:01

标签: c# asp.net-core kestrel-http-server

如何从我的wwwroot中获取asp.net核心来提供index.html文件?

我想这样做的原因是因为我使用角度CLI开发了一个角度4应用程序,它负责整个构建过程。我已将其设置为构建到我的asp.net核心项目的wwwroot目录中,但asp.net核心并不想提供它。

起初我试图通过控制器返回html文件。我试过这条路:

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

然后在控制器中我返回如下的html文件:

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

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

这没有用。它返回了一个404未找到的异常并给出了路径,但它给出的路径是index.html文件的正确路径(我将其剪切并粘贴到资源管理器中并打开文件)。

我也在启动时声明这些:

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

然后我尝试删除默认路由。现在我能够访问index.html文件,但仅当我输入文件名时,即:

  

本地主机:58420 / index.html中

如果我尝试在没有" index.html"的情况下访问域的根目录指定我收到404错误。

将index.html引用为默认页面的正确方法是什么?我猜测从控制器做它可能更好,因为它将与角度路由兼容而不重写。

9 个答案:

答案 0 :(得分:29)

我需要在UseStaticFiles()之前声明UseDefaultFiles()。

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

答案 1 :(得分:25)

只需在startup.cs中使用它:

app.UseFileServer();

它的简写:

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

...,它避免了必须按照正确顺序进行操作的问题

答案 2 :(得分:4)

安装NuGet包Microsoft.AspNetCore.StaticFiles

现在,在Startup.Configure方法中,添加:

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();
}

您现在应该从wwwroot目录获取文件(如果您想将其更改为其他内容,请使用UseWebRoot。)

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

答案 3 :(得分:1)

在configureservices方法内的startup.cs中应用此方法。在这里,我们创建一个DefaultFilesOption对象,然后清除路径中设置的所有默认文件。接下来,我们添加要设置为默认文件的路径。然后,我们使用'app.UseDefaultFiles(defaultfileoptions)注入依赖项。另外,我们需要注入静态文件作为依赖项。

`

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
    DefaultFilesOption defaultFileOptions = new DefaultFilesOption();
    defaultFileOptions.DefaultFileNames.Clear();
    defaultFilesOptions.DefaultFileNames.Add("Index.html");
    app.UseDefaultFiles(defaultFileOptions);
    app.UseStaticFiles();
}  

`

答案 4 :(得分:0)

您正在混合使用的MVC和默认文件(useDefaultFiles)。 从代码中注释掉以下几行

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

并仅使用app.UseDefaultFiles();。它将开始工作。

答案 5 :(得分:0)

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

这是最佳选择,因为UseDefaultFiles URL重写器将仅搜索index.html,而不搜索以下旧文件:default.htmdefault.htmlindex.htm

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

答案 6 :(得分:0)

例如,如果您要使用另一个文件(例如foo.html)作为默认文件,则可以在Startup.Configure方法中使用以下代码进行操作。

// Specify foo.html as the default document
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
defaultFilesOptions.DefaultFileNames.Clear();
defaultFilesOptions.DefaultFileNames.Add("foo.html");
// Add Default Files Middleware
app.UseDefaultFiles(defaultFilesOptions);
// Add Static Files Middleware
app.UseStaticFiles();

方法2:

UseFileServer结合了UseStaticFilesUseDefaultFilesUseDirectoryBrowser中间件的功能。 DirectoryBrowser中间件可启用目录浏览,并允许用户查看指定目录中的文件。我们可以将UseStaticFilesUseDefaultFiles中间件替换为UseFileServer中间件。

// Use UseFileServer instead of UseDefaultFiles & UseStaticFiles

FileServerOptions fileServerOptions = new FileServerOptions();
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Clear();
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Add("foo.html");
app.UseFileServer(fileServerOptions);

答案 7 :(得分:0)

//默认情况下,ASP.net核心不提供静态文件,例如HTML,css,图像等。     我需要在请求处理管道中配置中间件以提供静态文件。

// This code would be written in Startup.cs class for configuring the middleware components.



  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

        app.UseDefaultFiles(); // This sets the default page redirection for the in-comming request
            app.UseStaticFiles(); // This serves the static files to the client.

        }

答案 8 :(得分:-5)

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

它必须帮助你