C# Academy · Oppitunti

Validoinnin integrointi API-rajapintoihin

Palauttakaa selkeitä validointivirheiden vastauksia.

Oppitunti 4/413 vaihetta

Validoinnin integrointi API-rajapintoihin on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

FluentValidationin liittäminen ASP.NET Coreen

Rekisteröikää validaattorit riippuvuusinjektioon, jotta pyynnöt voidaan validoida automaattisesti. AddValidatorsFromAssembly-apufunktio käy kokoonpanon läpi ja rekisteröi kaikki löytämänsä validaattorit.

using FluentValidation;

builder.Services
    .AddValidatorsFromAssemblyContaining<CustomerValidator>();

Automaattinen validoinnin väliohjelmisto

Moderni FluentValidation suosii eksplisiittistä validointia, mutta voitte ottaa käyttöön automaattisen validoinnin, joka kytkeytyy mallin sidontaan ja hylkää virheelliset pyynnöt ennen toiminnon suorittamista.

dotnet add package FluentValidation.AspNetCore

builder.Services.AddFluentValidationAutoValidation();

DI:stä ratkaistavat validaattorit

Koska validaattorit rekisteröidään DI:n avulla, ne voivat injektoida palveluita, kuten repositorioita. Näin tietokantaan perustuvat asynkroniset säännöt toimivat saumattomasti API:ssanne.

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

Eksplisiittinen validointi endpointissa

Monet tiimit suosivat eksplisiittistä validointia selkeyden vuoksi. Injektoikaa IValidator<T> ja kutsukaa sitä käsittelijän alussa.

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

Mikä ProblemDetails on

ProblemDetails (RFC 7807) on HTTP-virhevastausten standardoitu JSON-muoto. Se sisältää kenttiä, kuten type, title, status ja detail, joten asiakkaat saavat ennakoitavan virherakenteen.

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

ValidationProblemDetails

Validointivirheissä ASP.NET Core käyttää ValidationProblemDetails-tyyppiä, joka laajentaa ProblemDetailsia errors-sanakirjalla. Sanakirja yhdistää kunkin kentän sen virheilmoituksiin.

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

FluentValidation-tulosten muuntaminen

ToDictionary()-laajennus muuntaa ValidationResult-tuloksen field -> messages -sanakirjaksi, jota ValidationProblem odottaa.

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

ProblemDetails-tulosteen mukauttaminen

Käyttäkää AddProblemDetails-metodia ja mukauttajaa kaikkien virhevastausten täydentämiseen, esimerkiksi jäljitystunnuksen lisäämiseen vianmääritystä varten.

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

Validointi MVC-ohjaimissa

Kun automaattinen validointi on käytössä ja käytössä on [ApiController], ohjaimen toiminnot palauttavat virheellisen pyynnön yhteydessä automaattisesti myös ValidationProblemDetails-tiedot, joten muoto on yhdenmukainen kaikissa päätepisteissä.

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

Validointisuodatin Minimal API -rajapinnoille

Voitte keskittää eksplisiittisen validoinnin päätepistesuodattimeen, jolloin jokainen käsittelijä pysyy selkeänä.

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

Automaattisen ja eksplisiittisen validoinnin valinta

Automaattinen validointi on kätevää, mutta piilottaa validointivaiheen. Eksplisiittinen validointi vaatii enemmän koodia, mutta tekee toiminnan näkyväksi ja helpottaa testaamista. Monet tiimit valitsevat eksplisiittisen validoinnin ja jaetun suodattimen, jolloin saadaan molempien parhaat puolet.

Pikatarkistus

Testatkaa API-validoinnin integrointi.

Kertaus

Validoinnin integrointi tarkoittaa validaattorien rekisteröimistä AddValidatorsFromAssembly-menetelmällä, automaattisen validoinnin valinnaista käyttöönottoa sekä virheiden palauttamista ValidationProblemDetails-tietoina käyttämällä Results.ValidationProblem(result.ToDictionary())-kutsua. DI:n ansiosta validaattorit voivat käyttää tietovarastoja asynkronisiin sääntöihin, ja voitte mukauttaa ProblemDetails-tietoja tai käyttää päätepistesuodattimia käsittelijöiden pitämiseksi selkeinä.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Validoinnin integrointi API-rajapintoihin” ilmainen?

Kyllä – oppitunnin ”Validoinnin integrointi API-rajapintoihin” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Validoinnin integrointi API-rajapintoihin”?

Palauttakaa selkeitä validointivirheiden vastauksia. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Validoinnin integrointi API-rajapintoihin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Data Annotation -validointi
  2. FluentValidation-säännöt
  3. Mukautetut ja ehdolliset säännöt
  4. Validoinnin integrointi API-rajapintoihin
← Takaisin: C# Academy