首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure函数应用程序- HttpContext IServerVariablesFeature在本地环境中不受支持

Azure函数应用程序- HttpContext IServerVariablesFeature在本地环境中不受支持
EN

Stack Overflow用户
提问于 2022-02-11 10:35:27
回答 1查看 243关注 0票数 2

我正在运行一个运行时4,.NET 6.0的天蓝色函数应用程序。在本地运行的环境中调用函数应用程序时,req.HttpContext.GetServerVariable()总是返回null,因为IServerVariablesFeaturecontext.Features列表中不受支持。

当我将它部署到函数应用程序的azure托管实例时,变量将被正确地填充。我已经做了广泛的研究,一直无法确定这是有意不支持的,还是我在本地环境中遗漏了某种形式的额外配置。

下面是一个测试函数,它尝试读取3个不同的服务器变量并将它们作为字符串返回,可以使用postman中的get请求或通过浏览器http://localhost:7071/api/GetServerVariable调用它们

代码语言:javascript
运行
复制
    public static class TestFunction
    {
        [FunctionName("GetServerVariable")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "GetServerVariable")] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            var url = req.HttpContext.GetServerVariable("URL");
            var remoteAddr = req.HttpContext.GetServerVariable("REMOTE_ADDR");
            var https = req.HttpContext.GetServerVariable("HTTPS");

            var response = $"Current server variables: URL: {url} - REMOTE_ADDR: {remoteAddr} - HTTPS: {https}";

            log.LogWarning(response);

            return new OkObjectResult(response);
        }
    }
EN

Stack Overflow用户

发布于 2022-02-16 08:35:00

根据这个文档,GetServerVariable返回

如果服务器不支持IServerVariablesFeature特性,则为IServerVariablesFeature。如果变量不存在或未设置,则可能返回空或空。

解决方法之一是包括转发头中间件

在请求到达应用程序之前,代理服务器、负载平衡器和其他网络设备通常会隐藏有关请求的信息。当通过HTTP代理HTTPS请求并必须在报头中传输时,原始方案将丢失。还必须在报头中转发原始客户端IP地址,因为应用程序接收的是来自代理的请求,而不是其在Internet或公司网络上的真实来源。

来自MSDN文章

虽然仅检索REMOTE_ADDR服务器变量就足够了,但我在网上发现了一些资源,这些资源建议这样的代码也应该检查HTTP_X_FORWARDED_FOR变量;如果请求通过代理服务器来翻译地址,那么这个变量就包含正确的地址。如果您请求一个不存在的服务器变量,ServerVariables属性将返回一个空字符串。因此,即使这个属性没有出现在我的测试中,尝试检索它的值也不会带来麻烦。

转发标头中间件读取标头X-Forwarded-ForX-Forwarded-HostX-Forwarded-Proto,并填充HttpContext上相关的字段。

REFERENCES:- 如何访问ASP.Net内核中的服务器变量

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71078670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档