Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 布拉佐。如何在启动类(方法ConfigureServices)中获取当前url?_C#_Asp.net Core_.net Core_Blazor - Fatal编程技术网

C# 布拉佐。如何在启动类(方法ConfigureServices)中获取当前url?

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

我正在使用AspNetCore.Identity.LiteDB。数据库名称取决于主机名。我试图使用NavigationManager获取主机名,但在Startup.ConfigureServices中,它似乎未初始化

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