다음을 통해 공유


.NET Azure Functions에서 개발 프록시 사용

.NET을 사용하여 Azure Functions를 빌드하고 개발 프록시를 사용하려는 경우 .NET 애플리케이션에서 개발 프록시를 사용하기 위한 일반적인 지침을 따릅니다.

중요합니다

Azure Functions가 시작 시 실패하지 않도록 하려면 --as-system-proxy false 옵션을 사용하거나, asSystemProxy 파일에서 falsedevproxyrc.json로 구성하여 시스템 프록시로 등록하지 않고 개발자 프록시를 시작하십시오. 개발자 프록시를 시스템 프록시로 등록하면 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.")'

개발에서 개발 프록시를 사용하고 프로덕션 환경에서 사용하지 않는 것 간에 쉽게 전환할 수 있도록 환경 변수를 사용하여 Azure Functions 앱에서 프록시를 구성하는 것이 가장 좋습니다. 환경 변수 local.settings.json을(를) 포함하도록 HTTPS_PROXY 파일을 변경합니다.

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

HttpClient .NET에서 자동으로 환경 변수를 HTTPS_PROXY 선택하고 이를 사용하여 나가는 HTTP 요청에 대한 프록시를 구성합니다.

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);
        }
    }
}