Dela via


Använda Dev Proxy med .NET Azure Functions

Om du skapar Azure Functions med .NET och vill använda Dev Proxy följer du den allmänna vägledningen för att använda Dev Proxy med .NET-program.

Viktigt!

Om du vill förhindra att Azure Functions misslyckas vid start startar du Dev Proxy utan att registrera det som en systemproxy, antingen med hjälp --as-system-proxy false av alternativet eller genom att konfigurera asSystemProxy till false i devproxyrc.json filen. Om du registrerar Dev Proxy som en systemproxy misslyckas Azure Functions vid start med ett felmeddelande som liknar:

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.")'

För att enkelt kunna växla mellan att använda Dev Proxy under utveckling och inte använda den i produktion kan du konfigurera proxyn i Azure Functions-appen med hjälp av miljövariabler. local.settings.json Ändra filen så att den HTTPS_PROXY innehåller miljövariabeln.

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

HttpClient i .NET hämtar HTTPS_PROXY miljövariabeln automatiskt och använder den för att konfigurera proxyn för utgående HTTP-begäranden.

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