Home / Guider / ASP.NET Core Contact Form Integration (Minimale APIer og Razor)
INTEGRASJONSVEILEDNING · .NET & BACKEND

ASP.NET Core Contact Form Integration (Minimale APIer og Razor)

Videresend kontaktskjemainnsendinger sikkert fra ASP.NET Core Minimal APIer eller Razor Pages til Lugatu ved hjelp av IHttpClientFactory, API-nøkler på serversiden og automatiske idempotensnøkler.

1. Minimalt API-endepunkt med IHttpClientFactory

ASP.NET Core Minimal APIer gir en ren, høyytelses måte å motta kontaktskjemainnsendinger på og videresende dem sikkert til Lugatu ved hjelp av IHttpClientFactory og en 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. Konfigurasjon i appsettings.json

Lagre Lugatu-legitimasjonen din sikkert ved å bruke ASP.NET Core-konfigurasjonsleverandører. I produksjon, bruk Azure Key Vault, AWS Secrets Manager eller miljøvariabler.

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

3. Implementering av Razor Pages Controller

For tradisjonelle flersidige ASP.NET Core MVC- eller Razor Pages-apper, videresend skjemainnsendinger i OnPostAsync mens du drar nytte av ASP.NET Core innebygd Antiforgery-tokenverifisering.

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();
    }
}

Sikkerhet og autentisering Invariant

Teknisk invariant: Server-til-server API-nøkler (lug_live_...) må holdes strengt på backend. Lagre dem i appsettings.json eller secrets-hvelv; send aldri live-nøkler til klientnettlesere.

Feilsøking og vanlige svelgingsfeil

HTTP 401 Uautorisert svar fra Lugatu API

Bekreft at API-nøkkelen din starter med lug_live_ og sendes i Autorisasjon: Bærer-overskriften. Sørg for at API-nøkkelen tilhører arbeidsområdet som inneholder den målrettede skjema-ID-en.

Ofte stilte spørsmål

Hvorfor bør jeg bruke IHttpClientFactory i stedet for å opprette en ny HttpClient-forekomst?

IHttpClientFactory administrerer socket-pooling og forhindrer socketutmatting under stor belastning i ASP.NET Core-applikasjoner.

Klar til å opprette skjemaendepunktet ditt?

Kom i gang gratis på sekunder. Ingen kredittkort kreves.

Start gratis →