运行我的Web请求时,Properties
的{{1}}属性中的某些属性来自HttpRequestMessage
命名空间,尽管我正在开发的应用程序是.NET Core 2 Azure功能。
我想使用集合System.Web
中类型为MS_HttpContext
的一个对象。是否可以使用该对象并以某种方式投射到它?该对象似乎来自标准.NET框架。
System.Web.HttpContextWrapper
编辑:我的问题与之前的问题(Get remote IP address in Azure function)略有不同,因为它询问如何从.NET Core应用程序访问[FunctionName("Track")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "track")]HttpRequestMessage req, TraceWriter log, ExecutionContext context)
{
// HttpContextWrapper is from System.Web, so this does not work
var ctx = (HttpContextWrapper)req.Properties["MS_HttpContext"]
}
命名空间中的类。尽管我承认在两个问题中期望的结果都是相同的,但是获得远程IP地址。
答案 0 :(得分:0)
好吧,我并不是很了解它是如何工作的,但是反思似乎是可行的:
private static string GetRemoteIpAddress(HttpRequestMessage req)
{
if (req.Properties.ContainsKey("MS_HttpContext") == false)
{
return null;
}
var httpContext = req.Properties["MS_HttpContext"];
var pi = httpContext.GetType().GetProperty("Request");
var request = pi.GetValue(httpContext);
pi = request.GetType().GetProperty("UserHostAddress");
var address = pi.GetValue(request);
return address == null ? null : address.ToString();
}