Bagikan melalui


Menggunakan Dev Proxy dengan .NET Azure Functions

Jika Anda membuat Azure Functions menggunakan .NET dan ingin menggunakan Dev Proxy, ikuti panduan umum untuk menggunakan Dev Proxy dengan aplikasi .NET.

Penting

Untuk mencegah Azure Functions gagal saat memulai, mulai Proksi Dev tanpa mendaftarkannya sebagai proksi sistem baik dengan menggunakan opsi --as-system-proxy false atau dengan mengonfigurasi asSystemProxy ke false dalam file devproxyrc.json. Jika Anda mendaftarkan Proksi Dev sebagai proksi sistem, Azure Functions gagal saat memulai dengan pesan kesalahan yang mirip dengan:

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

Agar dapat dengan mudah beralih antara menggunakan Dev Proxy dalam pengembangan dan tidak menggunakannya dalam produksi, Anda dapat mengonfigurasi proksi paling baik di aplikasi Azure Functions Anda menggunakan variabel lingkungan. local.settings.json Ubah file untuk menyertakan HTTPS_PROXY variabel lingkungan.

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

HttpClient di .NET secara otomatis mengambil variabel lingkungan HTTPS_PROXY dan menggunakannya untuk mengonfigurasi proksi untuk permintaan HTTP keluar.

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