تكامل نموذج الاتصال الأساسي لـ ASP.NET (الحد الأدنى من واجهات برمجة التطبيقات والشفرات)
قم بإعادة توجيه عمليات إرسال نماذج الاتصال بشكل آمن من ASP.NET Core Minimal APIs أو Razor Pages إلى Lugatu باستخدام IHttpClientFactory ومفاتيح API من جانب الخادم ومفاتيح العجز التلقائي.
1. الحد الأدنى من نقطة نهاية واجهة برمجة التطبيقات (API) مع IHttpClientFactory
توفر واجهات برمجة التطبيقات ASP.NET Core Minimal طريقة نظيفة وعالية الأداء لتلقي عمليات إرسال نماذج الاتصال وإعادة توجيهها بشكل آمن إلى Lugatu باستخدام IHttpClientFactory وIdempotency-Key.
using System.Net.Http.Headers;
using System.Text.Json;
var builder = WebApplication.CreateBuilder(args);
// Register resilient Lugatu HTTP client
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) =>
{
// 1. Silent rejection for automated bot traps
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")
};
// Ensure at-most-once delivery with Idempotency-Key
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
قم بتخزين بيانات اعتماد Lugatu الخاصة بك بشكل آمن باستخدام موفري تكوين ASP.NET Core. في الإنتاج، استخدم Azure Key Vault أو AWS Secrets Manager أو متغيرات البيئة.
{
"Lugatu": {
"FormId": "YOUR_FORM_GUID",
"ApiKey": "lug_live_your_secret_server_key"
}
}
3. تنفيذ وحدة تحكم الصفحات الحلاقة
بالنسبة لتطبيقات ASP.NET Core MVC أو Razor Pages التقليدية متعددة الصفحات، يمكنك إعادة توجيه عمليات إرسال النماذج داخل OnPostAsync مع الاستفادة من التحقق من رمز مكافحة التزوير المدمج في ASP.NET Core.
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, "Unable to deliver inquiry. Please try again.");
return Page();
}
}
الأمن والمصادقة الثابتة
المتغير الفني: يجب الاحتفاظ بمفاتيح API من خادم إلى خادم (lug_live_...) بشكل صارم على الواجهة الخلفية. قم بتخزينها في appsettings.json أو خزائن الأسرار؛ لا تقم مطلقًا بنقل المفاتيح المباشرة إلى متصفحات العميل.
استكشاف الأخطاء وإصلاحها وأخطاء العرض الشائعة
تأكد من أن مفتاح API الخاص بك يبدأ بـ lug_live_ ويتم تمريره في رأس Authorization: Bearer. Ensure the API key belongs to the workspace containing the targeted form ID.
الأسئلة المتداولة
لماذا يجب علي استخدام IHttpClientFactory بدلاً من إنشاء مثيل HttpClient جديد؟
يقوم IHttpClientFactory بإدارة تجميع مأخذ التوصيل ويمنع استنفاد مأخذ التوصيل تحت الحمل الثقيل في تطبيقات ASP.NET Core.
هل أنت مستعد لإنشاء نقطة نهاية النموذج الخاص بك؟
ابدأ مجانًا في ثوانٍ. لا حاجة لبطاقة الائتمان.