首页 > 解决方案 > 如何在 Blazor 中获取客户端 IP 和浏览器信息?

问题描述

如何在 Blazor 服务器端获取客户端信息,例如 IP 地址和浏览器名称/版本?

标签: blazorblazor-server-side

解决方案


好吧,我今天早上遇到了这个问题,我为服务器端 Blazor 解决它的方法是创建一个类,然后您可以将其作为 _host.cshtml 上的范围服务注入,然后在 Blazor 组件的任何位置访问它,因为 Razor 页面已经对此提供了支持。

    public class BlazorAppContext
    {
        /// <summary>
        /// The IP for the current session
        /// </summary>
        public string CurrentUserIP { get; set; }
    }

启动.cs:

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
      ...

      services.AddScoped<BlazorAppContext>();

      ...
    }

_host.cshtml:

@inject IHttpContextAccessor httpContextAccessor
@{
    BlazorAppContext.CurrentUserIP =   httpContextAccessor.HttpContext.Connection?.RemoteIpAddress.ToString();
}

您还可以尝试一种 Scoped 方法,然后您可以通过 DI 使用该方法。

注解:

如文档中所述,“Blazor WebAssembly 应用程序当前没有 DI 范围的概念。范围注册服务的行为类似于单例服务。但是,Blazor 服务器托管模型支持范围生命周期。在 Blazor 服务器应用程序中,范围服务注册的范围仅限于连接。因此,对于应该仅限于当前用户的服务,最好使用范围服务,即使当前意图是在浏览器中运行客户端。

我希望它有所帮助。


推荐阅读