Azure 函数/API:如何创建代理

问题描述 投票:0回答:2

我正在尝试创建一个代理应用程序来转发我的请求。

我将像这样使用它(适用于某些公共代理):

var proxy = new WebProxy { Address = new Uri("proxyUrl") };
var httpClientHandler = new HttpClientHandler { Proxy = proxy };
var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);
await client.GetAsync("https://www.whatsmyip.org");

我找到了微软的 thisthis 指南,但是它们似乎已经过时了,因为函数不再有代理。将鼠标悬停在“代理”上会告诉我:“此功能不适用于 V4-function-apps

我发现了this,它建议改用API管理。所以我尝试了。它看起来像这样:

使用右侧的后端配置,如果我覆盖“服务 URL”,我可以将请求转发到特定的 url:

但我想使用它,如我的第一个代码片段中所示,作为适用于任何端点的真正代理。 有什么想法吗?

azure azure-functions azure-api-management azure-api-apps
2个回答
0
投票

现在/曾经有一个名为 Azure Functions 代理的功能。这用于重定向/修改请求。但是,即使这个功能现在消失了,也不意味着您无法实现将您重定向到另一个网站的功能。

[FunctionName(nameof(Redirect))]
public static IActionResult Redirect(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "redirect")] HttpRequest req,
    ILogger log)
{   
        return new RedirectResult("https://google.com", true);
}

如果你只是想提供一个接口供其他API调用,我会推荐APIM。但是你也应该能够使用函数返回你想要的任何结果,但你需要自己完全实现它。

它可能看起来像这样(未经测试)

[FunctionName(nameof(RemoteAPICall))]
public static IActionResult RemoteAPICall(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "proxy")] HttpRequest req,
    ILogger log)
{   
    var response = await client.GetAsync("http://www.wtfismyip.com/json");
    return new OkObjectResult(response.Content);
}

0
投票

对于 Azure Function V4,您需要:

  1. 在应用设置中将EnableProxies添加到AzureWebJobsFeatureFlags,例如: “AzureWebJobsFeatureFlags”:“启用WorkerIndexing,EnableProxies

  2. 在项目根目录添加 proxies.json,例如:

    {
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
      "root": {
        "matchCondition": {
          "route": "<your-path>"
        },
        "backendUri": "https://<your>.azurewebsites.net/<function>"
      }
    }
    

注意:“代理”在 Azure 门户上将始终显示为灰色(禁用)。直接无视吧!

© www.soinside.com 2019 - 2024. All rights reserved.