Reputation: 914
I have a VB.NET project that uses the ASP.NET Web API, self-hosted.
I've been attempting to follow along with This link (Get the IP address of the remote host) to understand how to get the IP address of a client sending a message to my application, but every time I attempt to translate an item from the page referenced above to VB.NET, I run into errors.
I'd love to use the one-liner they referenced, below:
var host = ((dynamic)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
However, that translates (using Telerik's .NET converter) to the following, which produces an error that 'Dynamic' is not a type:
Dim host = DirectCast(request.Properties("MS_HttpContext"), dynamic).Request.UserHostAddress
When using any of the other solutions in the article above, I end up stopping after getting the error that httpcontextwrapper is not defined, even after adding any references i can think of / that are mentioned on the page.
A requirement for a project I'm working on is that a request only be processed if it is from a specific IP address, and that this be handled by the application. So I'm attempting to get the IP address from this incoming request, so that it may be compared with a variable.
Upvotes: 1
Views: 1412
Reputation: 125197
You can get the IP of client this way:
Dim IP = ""
If (Request.Properties.ContainsKey("MS_HttpContext")) Then
IP = DirectCast(Request.Properties("MS_HttpContext"), HttpContextWrapper) _
.Request.UserHostAddress
ElseIf (Request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)) Then
Dim p = DirectCast(Request.Properties(RemoteEndpointMessageProperty.Name), _
RemoteEndpointMessageProperty)
IP = p.Address
End If
You should add reference to System.Web
and System.ServiceModel
, also Imports Imports System.ServiceModel.Channels
.
Note
To use dynamic
way, you should first add Option Strict Off
as first line of the code file, then:
Dim ip = Request.Properties("MS_HttpContext").Request.UserHostAddress()
Upvotes: 2
Reputation: 32445
dynamic
not exists in the vb.net
But you will get same behavior if you cast it to HttpContextWrapper
instead of dynamic.
Dim host As String = DirectCast(request.Properties("MS_HttpContext"), HttpContextWrapper).
Request.
UserHostAddress
Or in little more readable style:
Dim wrapper As HttpContextWrapper =
DirectCast(request.Properties("MS_HttpContext"), HttpContextWrapper)
Dim host As String = wrapper.request.UserHostAddress
If you want get same behavior as dynamic
- see answer of @Reza Aghaei
Upvotes: 2