如何从我的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引用为默认页面的正确方法是什么?我猜测从控制器做它可能更好,因为它将与角度路由兼容而不重写。
答案 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.htm
,default.html
和index.htm
答案 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
结合了UseStaticFiles
,UseDefaultFiles
和UseDirectoryBrowser
中间件的功能。 DirectoryBrowser中间件可启用目录浏览,并允许用户查看指定目录中的文件。我们可以将UseStaticFiles
和UseDefaultFiles
中间件替换为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");
它必须帮助你