asp.net core 6 提供默认文档
提供默认文档
设置默认页面为访问者提供网站的起点。 若要从 wwwroot
提供默认文件,而不要求请求 URL 包含文件名,请调用 UseDefaultFiles 方法:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
要提供默认文件,必须在 UseStaticFiles
前调用 UseDefaultFiles
。 UseDefaultFiles
是不提供文件的 URL 重写工具。
使用 UseDefaultFiles
请求对 wwwroot
中的文件夹搜索:
default.htm
default.html
index.htm
index.html
如同请求包含了文件名一样,提供从列表中找到的第一个文件。 浏览器 URL 继续反映请求的 URI。
以下代码将默认文件名更改为 mydefault.html
:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
默认文档的 UseFileServer
UseFileServer 结合了 UseStaticFiles
、UseDefaultFiles
和 UseDirectoryBrowser
(可选)的功能。
调用 app.UseFileServer
以提供静态文件和默认文件。 未启用目录浏览:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
以下代码提供静态文件、默认文件和目录浏览:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(enableDirectoryBrowsing: true); app.UseRouting(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
考虑以下目录层次结构:
wwwroot
css
images
js
MyStaticFiles
images
MyImage.jpg
default.html
以下代码提供静态文件、默认文件和 MyStaticFiles
的目录浏览:
using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles", EnableDirectoryBrowsing = true }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
必须在 EnableDirectoryBrowsing
属性值为 true
时调用 AddDirectoryBrowser。
使用前面的文件层次结构和代码,URL 解析如下:
URI | 响应 |
---|---|
https://<hostname>/StaticFiles/images/MyImage.jpg |
MyStaticFiles/images/MyImage.jpg |
https://<hostname>/StaticFiles |
MyStaticFiles/default.html |
如果 MyStaticFiles 目录中不存在默认命名文件,则 https://<hostname>/StaticFiles
返回包含可单击链接的目录列表:
UseDefaultFiles 和 UseDirectoryBrowser 执行从不带尾部 /
的目标 URI 到带尾部 /
的目标 URI 的客户端重定向。 例如,从 https://<hostname>/StaticFiles
到 https://<hostname>/StaticFiles/
。 如果没有尾随斜杠 (/
),StaticFiles 目录中的相对 URL 无效,除非使用 DefaultFilesOptions 的 RedirectToAppendTrailingSlash 选项。