Ana Sayfa / Rehberler / ASP.NET Core İletişim Formu Entegrasyonu (Minimal APIs & Razor)
ENTEGRASYON REHBERİ · .NET & SUNUCU GELİŞTİRME

ASP.NET Core İletişim Formu Entegrasyonu (Minimal APIs & Razor)

ASP.NET Core Minimal APIs veya Razor Pages projelerinizden gelen form taleplerini IHttpClientFactory, sunucu API anahtarları ve Idempotency-Key kullanarak Lugatu altyapısına güvenle aktarın.

1. IHttpClientFactory Kullanan Minimal API Uç Noktası

ASP.NET Core Minimal APIs, form verilerini karşılayıp Idempotency-Key başlığıyla Lugatu sunucusuna güvenli şekilde iletmek için yüksek performanslı ve yalın bir mimari sunar.

Program.cs csharp
using System.Net.Http.Headers;
using System.Text.Json;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHttpClient("Lugatu", client =>
{
    client.BaseAddress = new Uri("https://www.lugatu.com");
    client.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Bearer", builder.Configuration["Lugatu:ApiKey"]);
});

var app = builder.Build();

app.MapPost("/api/contact", async (ContactRequest request, IHttpClientFactory clientFactory, IConfiguration config) =>
{
    if (!string.IsNullOrEmpty(request.Gotcha))
    {
        return Results.Ok(new { success = true });
    }

    var client = clientFactory.CreateClient("Lugatu");
    var formId = config["Lugatu:FormId"];

    var payload = new
    {
        fields = new Dictionary<string, string?>
        {
            ["name"] = request.Name,
            ["email"] = request.Email,
            ["message"] = request.Message,
        }
    };

    using var message = new HttpRequestMessage(HttpMethod.Post, $"/api/v1/forms/{formId}/submissions")
    {
        Content = new StringContent(JsonSerializer.Serialize(payload), System.Text.Encoding.UTF8, "application/json")
    };

    message.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());

    var response = await client.SendAsync(message);
    if (!response.IsSuccessStatusCode)
    {
        return Results.StatusCode((int)response.StatusCode);
    }

    return Results.Ok(new { success = true });
});

app.Run();

public record ContactRequest(string Name, string Email, string Message, string? Gotcha);

2. appsettings.json Yapılandırması

Lugatu kimlik bilgilerinizi ASP.NET Core yapılandırma sağlayıcılarıyla saklayın. Canlı ortamda Azure Key Vault veya ortam değişkenleri kullanın.

appsettings.json json
{
  "Lugatu": {
    "FormId": "FORM_KİMLİĞİNİZ",
    "ApiKey": "lug_live_gizli_sunucu_anahtariniz"
  }
}

3. Razor Pages Controller Uygulaması

Geleneksel Razor Pages projelerinde OnPostAsync metodu içinde sunucu doğrulaması ve Antiforgery korumasıyla birlikte Lugatu API çağrısı yapabilirsiniz.

Pages/Contact.cshtml.cs csharp
public class ContactModel : PageModel
{
    private readonly IHttpClientFactory _clientFactory;
    private readonly string _formId;

    public ContactModel(IHttpClientFactory clientFactory, IConfiguration config)
    {
        _clientFactory = clientFactory;
        _formId = config["Lugatu:FormId"]!;
    }

    [BindProperty]
    public ContactInput Input { get; set; } = new();

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid || !string.IsNullOrEmpty(Input.Gotcha))
        {
            return Page();
        }

        var client = _clientFactory.CreateClient("Lugatu");
        var content = new StringContent(
            JsonSerializer.Serialize(new { fields = Input }),
            System.Text.Encoding.UTF8,
            "application/json");

        content.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());

        var res = await client.PostAsync($"/api/v1/forms/{_formId}/submissions", content);
        if (res.IsSuccessStatusCode)
        {
            return RedirectToPage("/ContactSuccess");
        }

        ModelState.AddModelError(string.Empty, "Talebiniz iletilemedi. Lütfen tekrar deneyin.");
        return Page();
    }
}

Güvenlik ve Kimlik Doğrulama Standardı

Teknik Kural: Sunucudan sunucuya API anahtarları (lug_live_...) kesinlikle sunucu tarafında tutulmalıdır. appsettings.json veya kasa servislerinde saklayın; tarayıcıya asla iletmeyin.

Sorun Giderme ve Yaygın Hatalar

Lugatu API’sinden HTTP 401 Unauthorized yanıtı alınması

API anahtarınızın lug_live_ ile başladığından ve Authorization: Bearer başlığında iletildiğinden emin olun.

Sıkça Sorulan Sorular

Yeni HttpClient oluşturmak yerine neden IHttpClientFactory kullanmalıyım?

IHttpClientFactory soket havuzunu yönetir ve yüksek yük altında socket exhaustion (soket tükenmesi) sorunlarını önler.

Kendi formunuzu oluşturmaya hazır mısınız?

Saniyeler içinde ücretsiz başlayın. Kredi kartı gerektirmez.

Ücretsiz Başlayın →