๋ค๋ฅธ ์ฃผ์ ๋ก ๋ด์ฉ์ด ๊ธธ์ด์ง ๊ฑฐ ๊ฐ์์ ๊ธ์ ์๋ก ๋ง๋ค์์ต๋๋ค.
asp.net core 9๊น์ง minimal api๋ validation ๊ธฐ๋ฅ์ด ๊ณต์์ ์ผ๋ก ์ ๊ณต๋์ง ์์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ filter๋ฅผ ํตํด ํด๊ฒฐํ์๋๋ฐ์.
.net 10 ๋ถํฐ๋ ํ๋ ์์ํฌ์์ ๊ณต์์ ์ผ๋ก ๊ธฐ๋ฅ์ด ์ ๊ณต๋ฉ๋๋ค.
.net 10 preview 3 ๋ถํฐ ํ
์คํธ ํด ๋ณผ ์ ์์ผ๋ฉฐ ๊ฝค ์ ์ฉํด ๋ณด์
๋๋ค. ๋ค๋ง ์์ง๊น์ง๋ ์ผ๊ด์ฑ์ด ๋ถ์กฑํ ์ํ์
๋๋ค.
6๊ฐ์ ์ข์์
interceptor ๊ธฐ๋ฐ ์์ค์ ๋ค๋ ์ดํฐ์ ์์กดํ๊ธฐ ๋๋ฌธ์ csproj์ ๋ค์ ๊ตฌ์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋จ์ํ๋ฐ์.
builder.Services.AddValidation();
DI์ Validation์ ์ถ๊ฐํ๋ฉด ๋ฐ๋ก ๋์ํฉ๋๋ค.
2๊ฐ์ ์ข์์
minimal api ์ํ
app.MapPost("minimal", ([FromBody] Dto dto) => dto);
Case 1. RequiredAttribute
public class Dto
{
[Required]
public string Required { get; init; }
}
1-1. ๋น BODY ์ ๋ฌ
Post /minimal
Accept: application/json
Content-Type: application/json
{
}
.NET 8
200 OK
{
"required": null
}
.NET 10
400 Bad Request
{
"title": "One or more validation errors occurred.",
"errors": {
"Required": [
"The Required field is required."
]
}
}
1-2. ๋ช
์์ null ์ ๋ฌ
Post /minimal
Accept: application/json
Content-Type: application/json
{
"Required": null,
}
.NET 8
200 OK
{
"required": null
}
.NET 10
400 Bad Request
{
"title": "One or more validation errors occurred.",
"errors": {
"Required": [
"The Required field is required."
]
}
}
public class Dto
{
[Required]
public string Required { get; init; } = "inline"
}
2-1. ๋น BODY ์ ๋ฌ
Post /minimal
Accept: application/json
Content-Type: application/json
{
}
.NET 8, 10
200 OK
{
"required": "inline"
}
2-2 . ๋ช
์์ null ์ ๋ฌ
Post /minimal
Accept: application/json
Content-Type: application/json
{
"Required": null,
}
.NET 8
200 OK
{
"required": null
}
.NET 10
400 Bad Request
{
"title": "One or more validation errors occurred.",
"errors": {
"Required": [
"The Required field is required."
]
}
}
3๊ฐ์ ์ข์์
rkttu
5
๊ณ์ํด์ Reflection์ ๋์ ํด์ Source Generator ๊ธฐ๋ฐ ์ธํ๋ผ์ ํฌ์๋ฅผ ๋ง์ด ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ท๋ท ์ฝ์ด ์ด๊ธฐ๋ถํฐ ์์๋ DI ์ค์ฌ์ ํจ๋ฌ๋ค์ ๋ณํ์ ๋๋ถ์ด์ Source Generator ๊ธฐ๋ฐ์ ์ฝ๋ ํ์ฅ ํจ๋ฌ๋ค์์ ๋ํด์๋ ์ ์ฐจ ๋ฐ๊ทธ๋ฆผ์ด ๋ถ๋ช
ํ๊ฒ ๊ทธ๋ ค์ง๋ ๊ฒ ๊ฐ์์ ์ ๋ด๋ ํ์๊ฐ ์๋ ๋ถ๋ถ์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค. 
7๊ฐ์ ์ข์์
record
๋ .net 10 preview 4์์ ์ง์ํ๋ค๊ณ ํ๋๊ตฐ์.
์์ฃผ ์ข๋ค์.
์์ฌ์ด์
3๊ฐ์ ์ข์์