Azure函数中的HttpRequestMessage属性

时间:2018-11-09 14:38:13

标签: asp.net-core .net-core azure-functions

运行我的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地址。

1 个答案:

答案 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();
}