繁体   English   中英

在 Blazor 服务器端应用程序中获取用户代理和 IP

[英]Get user-agent and ip in Blazor server-side app

我用 Blazor 创建了一个服务器端应用程序,我想在每个页面请求中获取ip用户代理,我该如何实现? 在 .NET Core 应用程序中,我只需要在控制器中使用此代码:

var userAgent  = Request.Headers["User-Agent"].ToString()

但是在 Blazor 中,我无法检索这些数据。

用户代理:

您可以通过JavaScript interop获取它。 请按照以下简单步骤操作:

在您的_Host.cshtml文件中:

<script>
window.getUserAgent = () => {
    return navigator.userAgent;
};
</script>

要在任何 Blazor 页面上获取用户代理:

var remoteUserAgent = await JSRuntime.InvokeAsync<string>("getUserAgent");

在此处输入图片说明

请注意,您不需要在每个请求上都发送用户代理,您可以在第一个请求中发送它,所有其他客户端通信都将通过同一个套接字进行。

远程IP:

坏消息: “目前没有好的方法可以做到这一点。我们将研究如何提供这些信息给客户。” 有关如何在 Blazor 中获取客户端 IP 和浏览器信息的更多信息

2019 年 12 月 31 日编辑

我想我过度考虑如何访问HttpContext 阅读一些@enet评论和“如何在服务器端 Blazor 中使用 HttpContext 对象来检索有关用户、用户代理的信息”帖子,我意识到您可以通过第一个请求而不是通过 SignalR 请求访问HttpContext 我的意思是,Blazor 服务器通过 Http 请求将应用程序发送到客户端(浏览器),此时,当 Blazor 服务器应用程序提供给客户端时,您可以访问HttpContext 我在这里复制粘贴Michael Washington的答案(现在已删除),这个答案与Soroush Asadi的评论非常接近:

在您的启动文件中添加到ConfigureServices(IServiceCollection services)

services.AddHttpContextAccessor();

.razor页面中添加:

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor httpContextAccessor

//Then call:

httpContextAccessor.HttpContext.Connection?.RemoteIpAddress.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM