Freigeben über


Verwenden von Dev Proxy mit .NET Azure-Funktionen

Wenn Sie Azure-Funktionen mit .NET erstellen und Dev Proxy verwenden möchten, befolgen Sie die allgemeinen Anleitungen für die Verwendung von Dev Proxy mit .NET-Anwendungen.

Von Bedeutung

Um zu verhindern, dass Azure Functions beim Start fehlschlägt, starten Sie Dev Proxy, ohne ihn als Systemproxy zu registrieren, entweder mithilfe der --as-system-proxy false Option oder durch Konfigurieren asSystemProxyfalse in der devproxyrc.json Datei. Wenn Sie Dev Proxy als Systemproxy registrieren, schlägt Azure Functions beim Start mit einer Fehlermeldung wie folgende fehl:

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

Um zwischen der Verwendung von Dev Proxy in der Entwicklung und nicht in der Produktion zu wechseln, können Sie den Proxy in Ihrer Azure Functions-App am besten mithilfe von Umgebungsvariablen konfigurieren. Ändern Sie die local.settings.json Datei so, dass sie die Umgebungsvariable HTTPS_PROXY enthält.

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

HttpClient in .NET nimmt die HTTPS_PROXY Umgebungsvariable automatisch auf und verwendet sie zum Konfigurieren des Proxys für ausgehende HTTP-Anforderungen.

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