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.
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.
{
"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.
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
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.