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

Get user-agent and ip in Blazor server-side app(在Blazor服务器端应用程序中获取用户代理和IP)
本文介绍了在Blazor服务器端应用程序中获取用户代理和IP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Blazor创建了一个服务器端应用,并且我希望获得每个页面请求的IP用户代理,我如何才能实现这一目标?在.NET核心应用程序中,我只需要在控制器中使用以下代码:

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:

坏消息:"目前没有好的方法。我们将研究如何向客户提供此信息。"有关详细信息,请访问How do I get client IP and browser info in Blazor?

编辑2019年12月31日:

我想我对如何访问HttpContext想得太多了。阅读一些@enet评论和"How to use the HttpContext object in server-side Blazor to retrieve information about the user, user agent"帖子,我意识到您可以通过第一个请求访问HttpContext,而不是通过SignalR请求。我的意思是,Blazor服务器通过http请求将App发送到客户端(浏览器),此时,当Blazor服务器APP被提供给客户端时,您可以访问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();

这篇关于在Blazor服务器端应用程序中获取用户代理和IP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)