Home / Οδηγοί / Ενσωμάτωση βασικής φόρμας επικοινωνίας ASP.NET (Ελάχιστα API & Razor)
ΟΔΗΓΟΣ ΕΝΣΩΜΑΤΩΣΗΣ · .NET & BACKEND

Ενσωμάτωση βασικής φόρμας επικοινωνίας 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.

Program.cs csharp
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 ή μεταβλητές περιβάλλοντος.

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

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, "Unable to deliver inquiry. Please try again.");
        return Page();
    }
}

Αμετάβλητη ασφάλεια & έλεγχος ταυτότητας

Τεχνικό αμετάβλητο: Τα κλειδιά API από διακομιστή σε διακομιστή (lug_live_...) πρέπει να διατηρούνται αυστηρά στο backend. Αποθηκεύστε τα στο appsettings.json ή σε μυστικά θησαυροφυλάκια. Μην μεταδίδετε ποτέ ζωντανά κλειδιά σε προγράμματα περιήγησης πελατών.

Αντιμετώπιση προβλημάτων και κοινά σφάλματα κατάποσης

HTTP 401 Μη εξουσιοδοτημένη απόκριση από το Lugatu API

Βεβαιωθείτε ότι το κλειδί API σας ξεκινά με lug_live_ και μεταβιβάζεται στην κεφαλίδα Εξουσιοδότηση: Φορέας. Βεβαιωθείτε ότι το κλειδί API ανήκει στον χώρο εργασίας που περιέχει το στοχευμένο αναγνωριστικό φόρμας.

Συχνές Ερωτήσεις

Γιατί να χρησιμοποιήσω το IHttpClientFactory αντί να δημιουργήσω μια νέα παρουσία HttpClient;

Το IHttpClientFactory διαχειρίζεται το socket pooling και αποτρέπει την εξάντληση των socket υπό μεγάλο φορτίο στις εφαρμογές ASP.NET Core.

Είστε έτοιμοι να δημιουργήσετε το τελικό σημείο της φόρμας σας;

Ξεκινήστε δωρεάν σε δευτερόλεπτα. Δεν απαιτείται πιστωτική κάρτα.

Ξεκινήστε δωρεάν →