TryParse 및 BindAsync 메서드의 유효성이 검사됨
이제 ASP.NET Core는 Map*
메서드의 매개 변수 형식에 대한 TryParse
및 BindAsync
메서드의 유효성을 검사합니다. 유효한 메서드를 찾을 수 없는 경우 ASP.NET Core는 잘못된 메서드를 찾고 시작 시 예외(있는 경우)를 throw합니다. 예외는 메서드 시그니처가 잘못되었을 않을 수 있음을 알려서 예기치 않은 동작을 방지하는 데 도움이 됩니다.
도입된 버전
ASP.NET Core 6.0 RC 2
이전 동작
이전 버전의 ASP.NET Core 6에서는 TryParse
또는 BindAsync
메서드에 잘못된 시그니처가 있는 경우 예외가 throw되지 않았고 프레임워크가 본문에서 JSON을 바인딩하려고 시도했습니다.
// Todo.TryParse is not in a valid format.
// Will try to bind from body as JSON instead.
app.MapPost("/endpoint", (Todo todo) => todo.Item);
public class Todo
{
public string Item { get; set; }
public static bool TryParse(string value) => true;
}
새 동작
ASP.NET Core가 예상된 구문과 일치하지 않는 퍼블릭 TryParse
또는 BindAsync
메서드를 찾는 경우 시작 시 예외가 throw됩니다. 이전 예제에서는 다음과 비슷한 오류를 생성합니다.
TryParse method found on Todo with incorrect format. Must be a static method with format
bool TryParse(string, IFormatProvider, out Todo)
bool TryParse(string, out Todo)
but found
Boolean TryParse(System.String)
호환성이 손상되는 변경의 형식
이 변경은 이진 호환성 및 소스 호환성에 영향을 줄 수 있습니다.
변경 이유
개발자가 잘못된 형식을 사용하는 BindAsync
및 TryParse
메서드를 인식할 수 있도록 이 변경을 적용했습니다. 이전에 프레임워크는 매개 변수가 본문의 JSON이라고 가정하도록 대체됩니다. 이 가정으로 인해 예기치 않은 동작이 발생할 수 있습니다.
권장 작업
매개 변수 바인딩 이외의 이유로 형식에 서로 다른 구문이 포함된 BindAsync
또는 TryParse
메서드가 있는 경우 이제 시작 시 예외가 발생합니다. 이 동작을 방지하기 위해 여러 가지 전략을 사용할 수 있습니다.
BindAsync
또는TryParse
메서드를internal
또는private
로 변경합니다.- 프레임워크가 찾는 구문이 있는 새로운
BindAsync
또는TryParse
메서드를 추가합니다. 유효한 메서드가 발견되면 잘못된 메서드는 무시됩니다. - 매개 변수를
[FromBody]
로 표시합니다.
영향을 받는 API
RequestDelegateFactory.Create()
- 모든
IEndpointRouteBuilder.Map*()
메서드(예:app.MapGet()
,app.MapPost()
)
.NET