我用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");
注意,您不需要在每个请求上都发送用户代理,您可以在第一个请求中发送它,所有其他客户端通信将通过同一套接字进行。
坏消息:“目前尚无好方法。我们将研究如何向客户提供此信息。” 有关如何在Blazor中获取客户端IP和浏览器信息的详细信息?
编辑于2019年12月31日:
我想我对如何访问的想法过多了HttpContext
。阅读一些@enet注释和“如何在服务器端Blazor中使用HttpContext对象检索有关用户,用户代理的信息”的帖子,我意识到您可以HttpContext
通过第一个请求而不是通过SignalR请求进行访问。我的意思是Blazor Server通过Http Request将应用程序发送给客户端(浏览器),此时,当Blazor Server应用程序提供给客户端时,您可以访问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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句