C# Academy · บทเรียน

การผสานการตรวจสอบเข้ากับ API

ส่งการตอบกลับข้อผิดพลาดจากการตรวจสอบที่เป็นระเบียบ

บทเรียน 4 จาก 413 ขั้นตอน

การผสานการตรวจสอบเข้ากับ API เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเชื่อม FluentValidation เข้ากับ ASP.NET Core

หากต้องการตรวจสอบคำขอโดยอัตโนมัติ ให้ลงทะเบียนตัวตรวจสอบด้วยการฉีดการพึ่งพา ตัวช่วย AddValidatorsFromAssembly จะสแกนแอสเซมบลีและลงทะเบียนตัวตรวจสอบทุกตัวที่พบ

using FluentValidation;

builder.Services
    .AddValidatorsFromAssemblyContaining<CustomerValidator>();

มิดเดิลแวร์ตรวจสอบความถูกต้องอัตโนมัติ

FluentValidation สมัยใหม่เน้นการตรวจสอบที่ระบุอย่างชัดเจน แต่คุณสามารถเปิดใช้การตรวจสอบอัตโนมัติที่เชื่อมเข้ากับการผูกข้อมูลโมเดล เพื่อปฏิเสธคำขอที่ไม่ถูกต้องก่อนที่แอ็กชันของคุณจะเริ่มทำงาน

dotnet add package FluentValidation.AspNetCore

builder.Services.AddFluentValidationAutoValidation();

ตัวตรวจสอบที่แก้ไขจาก DI

เนื่องจากตัวตรวจสอบลงทะเบียนไว้ด้วย DI ตัวตรวจสอบจึงสามารถฉีดบริการต่าง ๆ เช่น แหล่งเก็บข้อมูลได้ ทำให้กฎแบบอะซิงโครนัสที่ใช้ฐานข้อมูลทำงานร่วมกับเอพีไอของคุณได้อย่างราบรื่น

public class UserValidator : AbstractValidator<UserRequest>
{
    public UserValidator(IUserRepository repo)
    {
        RuleFor(u => u.Email)
            .MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
    }
}

การตรวจสอบที่ระบุอย่างชัดเจนในจุดปลายทาง

หลายทีมเลือกใช้การตรวจสอบที่ระบุอย่างชัดเจนเพื่อให้เข้าใจได้ง่าย ให้ฉีด IValidator<T> แล้วเรียกใช้ที่ด้านบนของ handler

app.MapPost("/users", async (
    UserRequest request,
    IValidator<UserRequest> validator) =>
{
    var result = await validator.ValidateAsync(request);
    if (!result.IsValid)
        return Results.ValidationProblem(result.ToDictionary());
    return Results.Ok();
});

ProblemDetails คืออะไร

ProblemDetails (RFC 7807) คือรูปแบบ JSON มาตรฐานสำหรับการตอบกลับข้อผิดพลาดของ HTTP โดยมีฟิลด์ เช่น type, title, status และ detail ทำให้ไคลเอนต์ได้รับโครงสร้างข้อผิดพลาดที่คาดเดาได้

{
  "type": "https://tools.ietf.org/html/rfc7231",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": { "Email": ["Email is required."] }
}

ValidationProblemDetails

สำหรับข้อผิดพลาดจากการตรวจสอบความถูกต้อง ASP.NET Core จะใช้ ValidationProblemDetails ซึ่งขยายความสามารถของ ProblemDetails ด้วยพจนานุกรม errors ที่จับคู่แต่ละฟิลด์กับข้อความของฟิลด์นั้น

return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails response

การแปลงผลลัพธ์จาก FluentValidation

ส่วนขยาย ToDictionary() จะแปลง ValidationResult เป็นพจนานุกรม field -> messages ที่ ValidationProblem ต้องการ

var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
    IDictionary<string, string[]> errors = result.ToDictionary();
    return Results.ValidationProblem(errors);
}

การปรับแต่งผลลัพธ์ของ ProblemDetails

ใช้ AddProblemDetails และตัวปรับแต่งเพื่อเพิ่มข้อมูลให้กับการตอบกลับข้อผิดพลาดทุกครั้ง เช่น การเพิ่มรหัสติดตามเพื่อช่วยแก้ไขข้อบกพร่อง

builder.Services.AddProblemDetails(options =>
{
    options.CustomizeProblemDetails = ctx =>
        ctx.ProblemDetails.Extensions["traceId"] =
            ctx.HttpContext.TraceIdentifier;
});

การตรวจสอบข้อมูลในตัวควบคุม MVC

เมื่อเปิดใช้การตรวจสอบข้อมูลอัตโนมัติและใช้ [ApiController] แอ็กชันของตัวควบคุมจะส่งคืน ValidationProblemDetails โดยอัตโนมัติเมื่อคำขอไม่ถูกต้อง ทำให้รูปแบบสอดคล้องกันในทุกจุดปลายทาง

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create(UserRequest request) => Ok();
}

ตัวกรองการตรวจสอบข้อมูลสำหรับ Minimal API

คุณสามารถรวมการตรวจสอบข้อมูลที่ระบุไว้อย่างชัดเจนไว้ที่ศูนย์กลางด้วยตัวกรองจุดปลายทาง เพื่อให้ตัวจัดการแต่ละตัวมีโค้ดที่กระชับและอ่านง่าย

app.MapPost("/users", (UserRequest r) => Results.Ok())
   .AddEndpointFilter<ValidationFilter<UserRequest>>();

เลือกแบบอัตโนมัติหรือแบบระบุชัดเจน

การตรวจสอบข้อมูลอัตโนมัติสะดวกแต่ซ่อนขั้นตอนการตรวจสอบข้อมูลไว้ ส่วนการตรวจสอบข้อมูลแบบระบุชัดเจนมีโค้ดมากกว่าแต่โปร่งใสและทดสอบได้ง่ายกว่า หลายทีมจึงเลือกใช้การตรวจสอบข้อมูลแบบระบุชัดเจนร่วมกับตัวกรองที่ใช้ร่วมกัน เพื่อให้ได้ข้อดีของทั้งสองแบบ

ตรวจสอบอย่างรวดเร็ว

ทดสอบการทำงานร่วมกับการตรวจสอบข้อมูลของ API

สรุป

การผสานการตรวจสอบข้อมูลหมายถึงการลงทะเบียนตัวตรวจสอบด้วย AddValidatorsFromAssembly การเปิดใช้การตรวจสอบข้อมูลอัตโนมัติตามต้องการ และการส่งคืนข้อผิดพลาดเป็น ValidationProblemDetails ผ่าน Results.ValidationProblem(result.ToDictionary()) DI ช่วยให้ตัวตรวจสอบใช้ที่เก็บข้อมูลสำหรับกฎแบบ async ได้ และคุณยังปรับแต่ง ProblemDetails หรือใช้ตัวกรองจุดปลายทางเพื่อให้ตัวจัดการมีโค้ดที่สะอาดได้

เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

คำถามที่พบบ่อย

บทเรียน “การผสานการตรวจสอบเข้ากับ API” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การผสานการตรวจสอบเข้ากับ API” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การผสานการตรวจสอบเข้ากับ API”

ส่งการตอบกลับข้อผิดพลาดจากการตรวจสอบที่เป็นระเบียบ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การผสานการตรวจสอบเข้ากับ API” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตรวจสอบความถูกต้องด้วยคำอธิบายข้อมูล
  2. กฎ FluentValidation
  3. กฎแบบกำหนดเองและแบบมีเงื่อนไข
  4. การผสานการตรวจสอบเข้ากับ API
← กลับไปที่ C# Academy