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

时间:2019-12-24 13:45:34

标签: c# .net asp.net-core blazor blazor-server-side

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

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

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

2 个答案:

答案 0 :(得分:3)

用户代理:

您可以通过JavaScript interop来获取它。请执行以下简单步骤:

在您的_Host.cshtml文件上:

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

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

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

enter image description here

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

远程IP:

坏消息:“目前尚无好方法。我们将研究如何向客户提供此信息。” 更多信息,{{{3 }}

已编辑,2019年12月31日:

我想我对如何访问HttpContext太想了。阅读一些How do I get client IP and browser info in Blazor?评论和 @enet 帖子后,我意识到您可以通过第一个请求而不是SignalR请求访问HttpContext。我的意思是Blazor服务器通过Http请求将应用程序发送给客户端(浏览器),此时,当Blazor服务器应用程序服务于客户端时,您可以访问HttpContext。我在此处复制粘贴"How to use the HttpContext object in server-side Blazor to retrieve information about the user, user agent"的答案(现已删除),该答案非常接近Michael Washington的评论:

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

services.AddHttpContextAccessor();

.razor页中添加:

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor httpContextAccessor

//Then call:

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

答案 1 :(得分:-1)

See this answer如何在不使用JSInterop的情况下获取用户代理,IP地址及更多信息,而JSInterop只能用作不得已的方法...