使用Microsoft.Azure.Functions.Worker.Http的HttpRequestData如何获取远程IP地址
在.NET 5及以上版本的Azure Function独立工作进程模型中,可以正常获取请求的远程IP信息,该信息默认存储在HttpRequestData对象的Headers属性中,无需从FunctionContext中读取。
Azure Function平台在转发请求到函数工作进程时,会自动将客户端原始IP写入X-Forwarded-For请求头,你可以直接从请求头中提取该值:
X-Forwarded-For头的格式为客户端IP, 代理1IP, 代理2IP...,取第一个逗号前的内容即可得到真实的远程请求IP。
参考实现代码如下:
public static HttpResponseData Run( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { // 从请求头读取X-Forwarded-For获取远程IP if (req.Headers.TryGetValues("X-Forwarded-For", out var forwardedIps)) { var remoteIp = forwardedIps.FirstOrDefault()?.Split(',')[0].Trim(); // 此处可添加IP记录、校验等逻辑 } // 其他业务逻辑 }
注:本地运行Function调试时没有平台代理层,默认不会携带X-Forwarded-For头,可手动在测试请求中添加该头模拟生产环境表现。也可以通过解析FunctionContext中的绑定上下文拿到IP信息,但操作复杂度远高于直接读取Headers属性,不推荐使用。
内容的提问来源于stack exchange,提问作者jbjon
相关产品推荐
相关产品推荐

