共用方式為


使用 Dev Proxy 配合 .NET Azure Functions

如果您使用 .NET 建置 Azure Functions 並想要使用開發 Proxy,請遵循 搭配 .NET 應用程式使用 Dev Proxy 的一般指引。

這很重要

若要防止 Azure Functions 在啟動時失敗,請啟動 Dev Proxy,但不要將其註冊為系統 Proxy。可以使用 --as-system-proxy false 選項,或在 asSystemProxy 檔案中將 false 設定為 devproxyrc.json。 如果您將 Dev Proxy 註冊為系統 Proxy,Azure Functions 會在啟動時失敗,並出現類似下列的錯誤訊息:

Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.", DebugException="System.Net.Http.HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.")'

在開發中使用 Dev Proxy,並於生產環境中停用它之間輕鬆切換,您可以透過環境變數在 Azure Functions 應用程式中有效地設定 Proxy。 變更檔案 local.settings.json 以包含 HTTPS_PROXY 環境變數。

{
  "IsEncrypted": false,
  "Values": {
    "HTTPS_PROXY": "http://127.0.0.1:8000"
  }
}

HttpClient 在 .NET 中會自動偵測 HTTPS_PROXY 環境變數,並用此環境變數來設定發出的 HTTP 要求的代理(Proxy)。

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace dotnet_azure_fn;

public class MyFn(ILogger<MyFn> logger, IHttpClientFactory httpClientFactory)
{
    private readonly ILogger<MyFn> _logger = logger;
    private readonly HttpClient _httpClient = httpClientFactory.CreateClient();

    [Function("MyFn")]
    public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
    {
        _logger.LogInformation("C# HTTP trigger function processed a request.");

        var result = await _httpClient.GetAsync("https://jsonplaceholder.typicode.com/posts");
        if (result.IsSuccessStatusCode)
        {
            return new OkObjectResult(await result.Content.ReadAsStringAsync());
        }
        else
        {
            _logger.LogError("HTTP request failed.");
            return new StatusCodeResult(StatusCodes.Status500InternalServerError);
        }
    }
}