C# 布拉佐。如何在启动类(方法ConfigureServices)中获取当前url?
我正在使用AspNetCore.Identity.LiteDB。数据库名称取决于主机名。我试图使用NavigationManager获取主机名,但在Startup.ConfigureServices中,它似乎未初始化C# 布拉佐。如何在启动类(方法ConfigureServices)中获取当前url?,c#,asp.net-core,.net-core,blazor,C#,Asp.net Core,.net Core,Blazor,我正在使用AspNetCore.Identity.LiteDB。数据库名称取决于主机名。我试图使用NavigationManager获取主机名,但在Startup.ConfigureServices中,它似乎未初始化 public void ConfigureServices(IServiceCollection services) { // Server Side Blazor doesn't register HttpClient by default
public void ConfigureServices(IServiceCollection services)
{
// Server Side Blazor doesn't register HttpClient by default
if (!services.Any(x => x.ServiceType == typeof(HttpClient)))
{
// Setup HttpClient for server side in a client side compatible fashion
services.AddScoped<HttpClient>(s =>
{
NavigationManager uriHelper = s.GetRequiredService<NavigationManager>();
return new HttpClient
{
BaseAddress = new Uri(uriHelper.BaseUri)
};
});
}
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddTransient<ILiteDbContext>(s =>
{
NavigationManager uriHelper = s.GetRequiredService<NavigationManager>();
Uri currentUrl= uriHelper.ToAbsoluteUri(uriHelper.BaseUri);
return new LiteDbContext(new LiteDatabase(this.GetUserDatabasePath(currentUrl)));
}
);
//services.AddTransient<ILiteDbContext, LiteDbContext>();
services.AddIdentity<ApplicationUser, AspNetCore.Identity.LiteDB.IdentityRole>(options =>
{
options.Password.RequireDigit = false;
options.Password.RequireUppercase = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequiredLength = 6;
})
.AddUserStore<LiteDbUserStore<ApplicationUser>>()
.AddRoleStore<LiteDbRoleStore<AspNetCore.Identity.LiteDB.IdentityRole>>()
.AddDefaultTokenProviders();
public void配置服务(IServiceCollection服务)
{
//默认情况下,服务器端Blazor不注册HttpClient
如果(!services.Any(x=>x.ServiceType==typeof(HttpClient)))
{
//以客户端兼容的方式为服务器端设置HttpClient
services.AddScoped(s=>
{
NavigationManager uriHelper=s.GetRequiredService();
返回新的HttpClient
{
BaseAddress=新Uri(uriHelper.BaseUri)
};
});
}
services.AddRazorPages();
AddServerSideBlazor();
services.AddTransient(s=>
{
NavigationManager uriHelper=s.GetRequiredService();
Uri currentUrl=uriHelper.ToAbsolutionUri(uriHelper.BaseUri);
返回新的LitedContext(新的LiteDatabase(this.GetUserDatabasePath(currentUrl));
}
);
//services.AddTransient();
服务附加性
据我所知,在初始化标识时,NavigationManager不会初始化。有没有办法在没有NavigationManager的情况下获取当前URL?这是Blazor服务器端还是Blazor客户端?
如果是客户端,您可以使用IWebAssemblyHostEnvironment
界面获取应用程序的BaseAddress
。
您可以在CSB程序中执行类似操作。cs
专用静态无效配置服务(iSeries收集服务、IWebAssemblyHostEnvironment hostEnvironment)
{
var baseAddress=hostEnvironment.baseAddress;
//做你的事
}
这是Blazor服务器端还是Blazor客户端?
如果是客户端,您可以使用IWebAssemblyHostEnvironment
界面获取应用程序的BaseAddress
。
您可以在CSB程序中执行类似操作。cs
专用静态无效配置服务(iSeries收集服务、IWebAssemblyHostEnvironment hostEnvironment)
{
var baseAddress=hostEnvironment.baseAddress;
//做你的事
}
不要认为你能做到这一点。在有人调用应用程序之前,该应用程序不知道它正在运行的域的任何信息,因此NavigationManager在请求内部调用之前无法向你提供任何信息。如果你在请求级别检查初始化,会怎么样?如果在收到请求时未设置BaseAddress,则使用NavigationManager进行设置。放置它在配置中?如果它是服务器端的,HttpContext.Current.Request会给你吗?@Gusman yep,你说得对。它需要在第一次请求时以某种方式进行初始化。也许重新初始化dbrequests,我现在不确定最佳方法。我不认为你可以这样做。在有人呼叫之前,应用程序对它正在运行的域一无所知是的,所以NavigationManager在请求内部调用之前无法向您提供任何信息。如果您在请求级别检查初始化,会怎么样?如果在收到请求时未设置基地址,则使用NavigationManager进行设置。将其置于配置中?如果是服务器端,HttpContext.Current.request会将其提供给您吗?@Gusman yep,您说得对。它是需要在第一个请求时以某种方式进行初始化。可能重新初始化dbrequests,我现在不确定最佳方法。Blazor服务器sidBlazor服务器sid