Home / Pemandu / Penyepaduan Borang Hubungan Teras ASP.NET (API & Pisau Cukur Minimum)
PANDUAN INTEGRASI · .NET & BACKEND

Penyepaduan Borang Hubungan Teras ASP.NET (API & Pisau Cukur Minimum)

Majukan penyerahan borang hubungan dengan selamat daripada API Minimum Teras ASP.NET atau Halaman Razor ke Lugatu menggunakan IHttpClientFactory, kunci API bahagian pelayan dan kunci mati pucuk automatik.

1. Titik Akhir API Minimum dengan IHttpClientFactory

API Minimum Teras ASP.NET menyediakan cara yang bersih dan berprestasi tinggi untuk menerima penyerahan borang hubungan dan memajukannya dengan selamat kepada Lugatu menggunakan IHttpClientFactory dan Kunci Idempotency.

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. Konfigurasi dalam appsettings.json

Simpan bukti kelayakan Lugatu anda dengan selamat menggunakan pembekal konfigurasi Teras ASP.NET. Dalam pengeluaran, gunakan Azure Key Vault, Pengurus Rahsia AWS atau pembolehubah persekitaran.

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

3. Pelaksanaan Pengawal Halaman Razor

Untuk aplikasi ASP.NET Core MVC atau Razor Pages berbilang halaman tradisional, kirimkan semula borang dalam OnPostAsync sambil mendapat manfaat daripada pengesahan token Antipemalsuan terbina dalam 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();
    }
}

Keselamatan & Pengesahan Invarian

Invarian Teknikal: Kunci API pelayan ke pelayan (lug_live_...) mesti disimpan dengan ketat di bahagian belakang. Simpannya dalam appsettings.json atau bilik kebal rahsia; jangan sekali-kali menghantar kunci langsung kepada penyemak imbas pelanggan.

Menyelesaikan masalah & Ralat Pengingesan Biasa

HTTP 401 Respons tidak dibenarkan daripada API Lugatu

Sahkan bahawa kunci API anda bermula dengan lug_live_ dan diluluskan dalam Pengepala Kebenaran: Pembawa. Pastikan kunci API tergolong dalam ruang kerja yang mengandungi ID borang yang disasarkan.

Soalan Lazim

Mengapa saya harus menggunakan IHttpClientFactory dan bukannya membuat contoh HttpClient baharu?

IHttpClientFactory menguruskan pengumpulan soket dan menghalang keletihan soket di bawah beban berat dalam aplikasi Teras ASP.NET.

Bersedia untuk membuat titik akhir borang anda?

Bermula secara percuma dalam beberapa saat. Tiada kad kredit diperlukan.

Mula Percuma →