Home / வழிகாட்டிகள் / ASP.NET கோர் தொடர்பு படிவ ஒருங்கிணைப்பு (குறைந்தபட்ச APIகள் & ரேஸர்)
ஒருங்கிணைப்பு வழிகாட்டி · .NET & Backend

ASP.NET கோர் தொடர்பு படிவ ஒருங்கிணைப்பு (குறைந்தபட்ச APIகள் & ரேஸர்)

IHttpClientFactory, சர்வர்-சைட் API விசைகள் மற்றும் தானியங்கி ஐடெம்போடென்சி விசைகளைப் பயன்படுத்தி ASP.NET Core Minimal APIகள் அல்லது Razor Pages ஆகியவற்றிலிருந்து Lugatu க்கு தொடர்பு படிவ சமர்ப்பிப்புகளைப் பாதுகாப்பாக அனுப்பவும்.

1. IHttpClientFactory உடன் குறைந்தபட்ச API எண்ட்பாயிண்ட்

ASP.NET Core Minimal APIகள், தொடர்பு படிவ சமர்ப்பிப்புகளைப் பெறுவதற்கும், IHttpClientFactory மற்றும் Idempotency-Key ஐப் பயன்படுத்தி Lugatu க்கு பாதுகாப்பாக அனுப்புவதற்கும் சுத்தமான, உயர் செயல்திறன் வழியை வழங்குகிறது.

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 இல் உள்ளமைவு

ASP.NET கோர் உள்ளமைவு வழங்குநர்களைப் பயன்படுத்தி உங்கள் Lugatu நற்சான்றிதழ்களைப் பாதுகாப்பாகச் சேமிக்கவும். தயாரிப்பில், Azure Key Vault, AWS சீக்ரெட்ஸ் மேனேஜர் அல்லது சுற்றுச்சூழல் மாறிகளைப் பயன்படுத்தவும்.

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

3. ரேஸர் பேஜஸ் கன்ட்ரோலர் அமலாக்கம்

பாரம்பரிய பல பக்க ASP.NET Core MVC அல்லது Razor Pages ஆப்ஸுக்கு, ASP.NET Core உள்ளமைக்கப்பட்ட Antiforgery டோக்கன் சரிபார்ப்பிலிருந்து பயனடையும் போது, ​​OnPostAsync இல் படிவ சமர்ப்பிப்புகளை முன்னோக்கி அனுப்பவும்.

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_...) பின்தளத்தில் கண்டிப்பாக வைக்கப்பட வேண்டும். appsettings.json அல்லது சீக்ரெட்ஸ் பெட்டகங்களில் அவற்றைச் சேமிக்கவும்; கிளையன்ட் உலாவிகளுக்கு நேரடி விசைகளை அனுப்ப வேண்டாம்.

சரிசெய்தல் & பொதுவான உட்செலுத்துதல் பிழைகள்

HTTP 401 Lugatu API இலிருந்து அங்கீகரிக்கப்படாத பதில்

உங்கள் API விசை lug_live_ இல் தொடங்குகிறதா மற்றும் அங்கீகாரம்: தாங்கி தலைப்பில் அனுப்பப்பட்டதா என்பதைச் சரிபார்க்கவும். இலக்கிடப்பட்ட படிவ ஐடியைக் கொண்ட பணியிடத்திற்கு API விசை சொந்தமானது என்பதை உறுதிப்படுத்தவும்.

அடிக்கடி கேட்கப்படும் கேள்விகள்

புதிய HttpClient நிகழ்வை உருவாக்குவதற்குப் பதிலாக நான் ஏன் IHttpClientFactory ஐப் பயன்படுத்த வேண்டும்?

IHttpClientFactory சாக்கெட் பூலிங்கை நிர்வகிக்கிறது மற்றும் ASP.NET கோர் பயன்பாடுகளில் அதிக சுமையின் கீழ் சாக்கெட் சோர்வடைவதைத் தடுக்கிறது.

உங்கள் படிவத்தின் இறுதிப்புள்ளியை உருவாக்கத் தயாரா?

நொடிகளில் இலவசமாகத் தொடங்குங்கள். கடன் அட்டை தேவையில்லை.

இலவசமாக தொடங்கவும் →