ASP.NET Core는 이제 TryParse
및 BindAsync
메서드가 Map*
메서드의 매개 변수 유형에 대해 유효성 검사를 수행합니다. 유효한 메서드를 찾을 수 없으면 ASP.NET Core는 잘못된 메서드를 검색하고, 프로그램 시작 시 이를 발견하면 예외를 발생시킵니다. 예외는 메서드 서명이 올바르지 않을 수 있음을 경고하여 예기치 않은 동작을 방지하는 데 도움이 됩니다.
도입된 버전
ASP.NET Core 6.0 RC 2
이전 동작
이전 버전의 ASP.NET Core 6에서는 a 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