C# 在DotVVM中获取远程IP地址

C# 在DotVVM中获取远程IP地址,c#,asp.net-core,dotvvm,C#,Asp.net Core,Dotvvm,我正在使用AspNet.Core和.netframework4.7.1使用DotVVM框架(1.1.9版)构建一个应用程序。 有时我需要记录远程用户的IP地址。有没有办法将其放入ViewModel中?我看过很多教程 ViewModelBase中有一个属性Context,该属性具有属性HttpContext,但它是一些内置的IHttpContext接口,而不是正确的HttpContext 然而,我发现我可以将现有的IHttpContext转换为DotvvmHttpContext,其中包含属性Ori

我正在使用AspNet.Core和.netframework4.7.1使用DotVVM框架(1.1.9版)构建一个应用程序。 有时我需要记录远程用户的IP地址。有没有办法将其放入ViewModel中?我看过很多教程

ViewModelBase中有一个属性
Context
,该属性具有属性
HttpContext
,但它是一些内置的
IHttpContext
接口,而不是正确的
HttpContext

然而,我发现我可以将现有的
IHttpContext
转换为
DotvvmHttpContext
,其中包含属性
OriginalContext
,这似乎就是我正在寻找的内容

var remoteAddr = ((DotvvmHttpContext)Context.HttpContext).OriginalContext.Connection.RemoteIpAddress;
因此,问题是,如果这是一种“安全”的方法,或者是否有任何其他“正确”的方法可以直接访问原始的AspNet HttpContext或远程IP地址?

查看中公开的源代码,似乎没有一种好的方法来访问连接信息。我曾希望该协议可能会公开远程IP地址,但事实并非如此

您必须依赖于从ASP.NET核心访问原始的
HttpContext
,才能访问该信息。如果您在ASP.NET Core(而不是OWIN)上运行,那么应该完全保存以将上下文转换为,这样您就可以访问底层的
HttpContext

因此,是的,您的解决方案在这里似乎很好:

var originalHttpContext = ((DotvvmHttpContext)Context.HttpContext).OriginalContext;

是的,只要您只打算在Asp.NETCore上运行应用程序,这是一种安全的方法。如果出于某种原因切换到OWIN主机,它将抛出无效的强制转换异常

还请注意,有一个帮助器方法用于获取Asp.Net核心http上下文,
context.GetAspNetCoreContext()。连接…
可能会更方便一些。从源代码中可以看出,它与您的代码基本相同: