MVC의 모델 바인딩에서 빈 본문 검색이 변경됨
MVC 모델 바인딩 중에 빈 요청 본문을 검색하는 메커니즘은 이제 IHttpRequestBodyDetectionFeature.CanHaveBody을(를) 사용합니다. 이 속성은 다음으로 설정됩니다.
true
:- 0이 아닌
Content-Length
요청 헤더 또는Transfer-Encoding: chunked
요청 헤더가 있는HTTP/1.x
요청의 경우. - 초기 헤더의 프레임에
END_STREAM
플래그를 설정하지 않은HTTP/2
요청의 경우.
- 0이 아닌
false
:Content-Length
또는Transfer-Encoding: chunked
요청 헤더가 없는HTTP/1.x
요청의 경우 또는Content-Length
요청 헤더가0
입니다.- WebSockets 요청과 같이
Connection: Upgrade
요청 헤더가 있는HTTP/1.x
요청의 경우. 이러한 요청에 대한 HTTP 요청 본문이 없으므로 업그레이드 후까지 데이터를 수신해서는 안 됩니다. - 초기 헤더의 프레임에서
END_STREAM
플래그를 설정하는HTTP/2
요청의 경우.
이전 동작은 Content-Length = 0
의 최소 유효성 검사를 수행했습니다. 일부 시나리오에서는 요청에 필요한 모든 HTTP 헤더 및 플래그가 포함되지 않은 경우 이제 요청 본문이 빈 본문이 있는 것으로 감지되고 클라이언트에 오류를 보고할 수 있습니다.
도입된 버전
ASP.NET Core 7.0
이전 동작
컨트롤러 작업이 요청 본문의 매개 변수를 바인딩하고 클라이언트 요청에 Content-Length
요청 헤더가 포함되지 않은 경우 프레임워크는 요청 본문을 역직렬화하는 동안 내부 예외를 반환합니다. 예를 들어 System.Text.Json
기반 입력 포맷터는 다음과 유사한 예외를 반환합니다.
System.Text.Json.JsonException: 'The input does not contain any JSON tokens.
Expected the input to start with a valid JSON token, when isFinalBlock is true.
Path: $ | LineNumber: 0 | BytePositionInLine: 0.'
다음 예제 JSON은 ProblemDetails 응답으로 형식이 지정된 이전 예외를 보여줍니다.
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-34e98b5841b88bfb5476965efd9d9c8c-5bb16bc50dfbabb7-00",
"errors": {
"$": [
"The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0."
],
"value": [
"The value field is required."
]
}
}
새 동작
IHttpRequestBodyDetectionFeature.CanHaveBody이(가) false
인 경우 역직렬화는 더 이상 시도되지 않습니다. 다음 예제 ProblemDetails 응답은 클라이언트에 반환된 오류 메시지가 요청 본문이 비어 있음을 나타내는 방법을 보여 줍니다.
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-0f87920dc675fdfdf8d7638d3be66577-bd6bdbf32d21b714-00",
"errors": {
"": [
"A non-empty request body is required."
],
"value": [
"The value field is required."
]
}
}
호환성이 손상되는 변경의 형식
이 변경 내용은 이진 호환성에 영향을 미칩니다.
변경 이유
IHttpRequestBodyDetectionFeature.CanHaveBody을(를) 사용하는 프레임워크의 다른 부분과 정렬하고 선택적 [FromBody]
모델 바인딩이 작동하지 않는 문제를 해결하려면(dotnet/aspnetcore #29570).
권장 작업
변경할 필요가 없습니다. 그러나 예기치 않은 동작이 표시되는 경우 클라이언트 요청이 적절한 HTTP 헤더를 보내는지 확인합니다.
영향을 받는 API
MVC 컨트롤러 작업
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기