Home / Sprievodcovia / Integrácia základného kontaktného formulára ASP.NET (minimálne rozhrania API a Razor)
INTEGRAČNÁ PRÍRUČKA · .NET & BACKEND

Integrácia základného kontaktného formulára ASP.NET (minimálne rozhrania API a Razor)

Posielajte odoslané kontaktné formuláre bezpečne z ASP.NET Core Minimal API alebo Razor Pages do Lugatu pomocou IHttpClientFactory, kľúčov API na strane servera a automatických kľúčov idempotencie.

1. Minimálny koncový bod API s IHttpClientFactory

ASP.NET Core Minimal API poskytujú čistý a vysokovýkonný spôsob prijímania odoslaných kontaktných formulárov a ich bezpečného posielania do Lugatu pomocou IHttpClientFactory a kľúča 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. Konfigurácia v súbore appsettings.json

Uložte svoje poverenia Lugatu bezpečne pomocou poskytovateľov konfigurácie ASP.NET Core. V produkcii používajte Azure Key Vault, AWS Secrets Manager alebo premenné prostredia.

appsettings.json json
{
  "Lugatu": {
    "FormId": "YOUR_FORM_GUID",
    "ApiKey": "lug_live_your_secret_server_key"
  }
}

3. Implementácia ovládača Razor Pages

V prípade tradičných viacstránkových aplikácií ASP.NET Core MVC alebo Razor Pages preposielajte odoslania formulárov v rámci OnPostAsync a zároveň využite výhody vstavaného overenia tokenov 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();
    }
}

Bezpečnosť a nemenné overenie

Technický invariant: Kľúče API server-to-server (lug_live_...) musia byť prísne uložené na backende. Uložte ich do appsettings.json alebo tajných trezorov; nikdy neprenášajte živé kľúče do klientskych prehliadačov.

Riešenie problémov a bežné chyby príjmu

HTTP 401 Neoprávnená odpoveď z Lugatu API

Overte, či váš kľúč API začína reťazcom lug_live_ a je odovzdaný v hlavičke Authorization: Bearer. Uistite sa, že kľúč API patrí do pracovného priestoru, ktorý obsahuje cieľové ID formulára.

Často kladené otázky

Prečo by som mal namiesto vytvárania novej inštancie HttpClient použiť IHttpClientFactory?

IHttpClientFactory spravuje združovanie soketov a zabraňuje vyčerpaniu soketov pri veľkom zaťažení v aplikáciách ASP.NET Core.

Ste pripravení vytvoriť koncový bod formulára?

Začnite zadarmo za pár sekúnd. Nevyžaduje sa žiadna kreditná karta.

Začnite zadarmo →