Ενσωμάτωση βασικής φόρμας επικοινωνίας ASP.NET (Ελάχιστα API & Razor)
Προωθήστε τις υποβολές της φόρμας επικοινωνίας με ασφάλεια από τα ASP.NET Core Minimal API ή τις σελίδες Razor στο Lugatu χρησιμοποιώντας IHttpClientFactory, κλειδιά API από την πλευρά του διακομιστή και κλειδιά αυτόματης αδυναμίας.
1. Ελάχιστο τελικό σημείο API με IHttpClientFactory
Τα ASP.NET Core Minimal API παρέχουν έναν καθαρό, υψηλής απόδοσης τρόπο για να λαμβάνετε υποβολές φόρμας επικοινωνίας και να τις προωθείτε με ασφάλεια στη 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. Υλοποίηση Razor Pages Controller
Για τις παραδοσιακές εφαρμογές πολλαπλών σελίδων ASP.NET Core MVC ή Razor Pages, προωθήστε τις υποβολές φορμών εντός του OnPostAsync, ενώ επωφεληθείτε από την ενσωματωμένη επαλήθευση διακριτικού Antiforgery στο 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_...) πρέπει να διατηρούνται αυστηρά στο backend. Αποθηκεύστε τα στο appsettings.json ή σε μυστικά θησαυροφυλάκια. Μην μεταδίδετε ποτέ ζωντανά κλειδιά σε προγράμματα περιήγησης πελατών.
Αντιμετώπιση προβλημάτων και κοινά σφάλματα κατάποσης
Βεβαιωθείτε ότι το κλειδί API σας ξεκινά με lug_live_ και μεταβιβάζεται στην κεφαλίδα Εξουσιοδότηση: Φορέας. Βεβαιωθείτε ότι το κλειδί API ανήκει στον χώρο εργασίας που περιέχει το στοχευμένο αναγνωριστικό φόρμας.
Συχνές Ερωτήσεις
Γιατί να χρησιμοποιήσω το IHttpClientFactory αντί να δημιουργήσω μια νέα παρουσία HttpClient;
Το IHttpClientFactory διαχειρίζεται το socket pooling και αποτρέπει την εξάντληση των socket υπό μεγάλο φορτίο στις εφαρμογές ASP.NET Core.
Είστε έτοιμοι να δημιουργήσετε το τελικό σημείο της φόρμας σας;
Ξεκινήστε δωρεάν σε δευτερόλεπτα. Δεν απαιτείται πιστωτική κάρτα.