.NET Azure İşlevleri ile Dev Proxy kullanma

Bir bakışta
Hedef: .NET Azure İşlevleri ile Dev Proxy kullanma
Süre: 10 dakika
Eklentiler: Çeşitli
Önkoşullar:Geliştirme Proxy'sini ayarlama, Azure İşlevleri Temel Araçları

.NET kullanarak Azure İşlevleri derleyip Geliştirme Proxy'si kullanmak istiyorsanız, .NET uygulamalarıyla Geliştirme Proxy'si kullanmaya yönelik genel yönergeleri izleyin.

Önemli

Azure İşlevleri'nin başlangıçta başarısız olmasını önlemek için, Dev Proxy'yi bir sistem proxy'si olarak kaydetmeden başlatmak amacıyla --as-system-proxy false seçeneğini kullanarak ya da asSystemProxy-yi false olarak devproxyrc.json dosyasında yapılandırarak başlatın. Dev Proxy'yi bir sistem proxy'si olarak kaydederseniz Azure İşlevleri başlangıçta aşağıdakine benzer bir hata iletisiyle başarısız olur:

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

Geliştirme aşamasında Dev Proxy kullanma ile üretimde kullanmama arasında kolayca geçiş yapabilmek için, ortam değişkenlerini kullanarak Azure İşlevleri uygulamanızda proxy'yi en iyi şekilde yapılandırabilirsiniz. local.settings.json dosyasını HTTPS_PROXY ortam değişkenini içerecek şekilde değiştirin.

Dosya: local.settings.json

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

HttpClient .NET'te ortam değişkenini HTTPS_PROXY otomatik olarak alır ve giden HTTP istekleri için ara sunucuyu yapılandırmak için kullanır.

Dosya: MyFn.cs

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

Ayrıca bakınız