如何在Razor Pages视图中获取Web服务器绑定的URL?
在Razor Pages视图中显示Web服务器绑定URL
你可以通过以下步骤实现需求:
1. 创建URL存储服务
定义一个单例服务来保存服务器绑定URL——这些URL仅在StartAsync执行后才会被填充:
public class ServerUrlsProvider { public IReadOnlyList<string> Urls { get; set; } = new List<string>(); }
2. 注册服务到DI容器
在Program.cs中把该服务注册为单例,确保整个应用生命周期内可以共享实例:
var builder = WebApplication.CreateBuilder(args); // 注册ServerUrlsProvider builder.Services.AddSingleton<ServerUrlsProvider>(); // 其他常规配置(如添加Razor Pages) builder.Services.AddRazorPages(); var app = builder.Build();
3. 启动后填充URL信息
在调用StartAsync完成应用启动后,从DI容器中获取服务实例,将app.Urls赋值给服务的属性:
// 中间件配置等常规代码 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); // 启动后获取并保存服务器绑定URL await app.StartAsync(); var urlsProvider = app.Services.GetRequiredService<ServerUrlsProvider>(); urlsProvider.Urls = app.Urls; await app.RunAsync();
4. 在Razor Page中注入并传递URL到视图
在页面后台代码(如Index.cshtml.cs)中注入ServerUrlsProvider,将URL数据暴露给视图:
public class IndexModel : PageModel { private readonly ServerUrlsProvider _urlsProvider; public IndexModel(ServerUrlsProvider urlsProvider) { _urlsProvider = urlsProvider; } public IReadOnlyList<string> ServerUrls { get; set; } public void OnGet() { ServerUrls = _urlsProvider.Urls; } }
5. 在视图中展示URL
在对应的Razor视图(如Index.cshtml)中遍历并显示所有绑定的URL:
<h3>当前服务器绑定URL:</h3> <ul> @foreach (var url in Model.ServerUrls) { <li>@url</li> } </ul>
补充说明
- 该方案仅在应用启动时获取一次URL,若需动态监听URL变更(此类场景极少),需额外结合服务器事件监听逻辑。
app.Urls会返回应用实际绑定的所有地址,包含HTTP、HTTPS等不同协议的URL。
内容的提问来源于stack exchange,提问作者Jez
相关产品推荐
相关产品推荐

