blazor - 如何在 Blazor 中获取客户端 IP 和浏览器信息?
问题描述
如何在 Blazor 服务器端获取客户端信息,例如 IP 地址和浏览器名称/版本?
解决方案
好吧,我今天早上遇到了这个问题,我为服务器端 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 服务器应用程序中,范围服务注册的范围仅限于连接。因此,对于应该仅限于当前用户的服务,最好使用范围服务,即使当前意图是在浏览器中运行客户端。
我希望它有所帮助。
推荐阅读
- java - 春季提交部分表单
- python-2.7 - Flask-Mail 未使用 Gmail 和应用密码进行身份验证
- javascript - 如何消除点击事件和以编程方式触发的点击事件之间的冲突
- xml-parsing - 错误 [stderr] (默认任务 1) org.xml.sax.SAXParseException; 系统标识:
- node.js - 是否建议在 nodejs 应用程序中运行 2 个 log4js?
- azure-cosmosdb - 使用 Azure Cosmos DB 时出现奇怪的 RU/s 使用情况(来自 java 的 mongo 接口)
- wordpress - 如何在 http 标头中为静态文件添加到期时间?
- garbage-collection - 为什么 finalize() 只在新对象创建后才执行,而不是在 gc() 被调用后执行?
- android - 从 Playground Online 生成 apk 文件
- python - Django - 使用外键进行序列化程序验证