ASP.NET কোর কন্টাক্ট ফর্ম ইন্টিগ্রেশন (মিনিমাম এপিআই এবং রেজার)
IHttpClientFactory, সার্ভার-সাইড এপিআই কী এবং স্বয়ংক্রিয় আইডেমপোটেন্সি কী ব্যবহার করে ASP.NET কোর মিনিমাল API বা রেজার পেজ থেকে লুগাটুতে নিরাপদে যোগাযোগ ফর্ম জমা দিন।
1. IHttpClientFactory সহ ন্যূনতম API এন্ডপয়েন্ট
ASP.NET Core Minimal APIs একটি পরিষ্কার, উচ্চ-পারফরম্যান্সের উপায় প্রদান করে যাতে যোগাযোগের ফর্ম জমা দেওয়া যায় এবং সেগুলিকে IHttpClientFactory এবং একটি Idempotency-কী ব্যবহার করে লুগাটুতে নিরাপদে ফরওয়ার্ড করে।
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-এ কনফিগারেশন
ASP.NET কোর কনফিগারেশন প্রদানকারী ব্যবহার করে আপনার লুগাতু শংসাপত্রগুলি নিরাপদে সংরক্ষণ করুন৷ উৎপাদনে, 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 অ্যাপের জন্য, ASP.NET কোর বিল্ট-ইন অ্যান্টিফোরজি টোকেন যাচাইকরণ থেকে উপকৃত হওয়ার সময় OnPostAsync-এর মধ্যে ফর্ম জমা দিন।
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_ দিয়ে শুরু হয় এবং অনুমোদন: বহনকারী শিরোনামে পাস করা হয়েছে। নিশ্চিত করুন যে API কী টার্গেট করা ফর্ম আইডি ধারণকারী ওয়ার্কস্পেসের অন্তর্গত।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
কেন আমি একটি নতুন HttpClient উদাহরণ তৈরি করার পরিবর্তে IHttpClientFactory ব্যবহার করব?
IHttpClientFactory সকেট পুলিং পরিচালনা করে এবং ASP.NET কোর অ্যাপ্লিকেশনগুলিতে ভারী লোডের অধীনে সকেট ক্লান্তি প্রতিরোধ করে।
আপনার ফর্ম শেষ বিন্দু তৈরি করতে প্রস্তুত?
সেকেন্ডের মধ্যে বিনামূল্যে শুরু করুন। কোনো ক্রেডিট কার্ডের প্রয়োজন নেই।