인스턴스(생성자 및 Uri 팩터리 메서드)를 만드는 TryCreate 메서드는 지금까지 URI 문자열의 길이를 약 65,000자로 제한했습니다(정확한 제한은 입력 형식에 따라 약간 다릅니다). 인스턴스의 길이 Uri 에 대한 상한이 거의 없으므로 이러한 제한이 해제되었습니다.
도입된 버전
.NET 10
이전 동작
이전에는 길이가 약 65,000자를 초과하는 인스턴스를 만들 Uri 수 없었습니다. 다음 예제와 같은 코드는 "잘못된 URI: Uri 문자열이 너무 깁니다."라는 메시지와 함께 던졌 UriFormatException 습니다.
new Uri($"https://host/{new string('a', 100_000)}");
새 동작
.NET 10 Uri 부터 많은 양의 데이터를 포함하는 인스턴스를 만들 수 있습니다. 다음은 그 예입니다.
string largeQuery = ...;
return new Uri($"https://someService/?query={Uri.EscapeDataString(largeQuery)}");
제거된 제한 사항은 대용량 데이터를 전달하는 가장 실용적인 구성 요소로 경로, 쿼리 및 조각에 주로 적용됩니다. 구성표 및 호스트와 같은 구성 요소는 여전히 일부 길이 제한을 적용할 수 있습니다. 또한 길이 제한에 접근할 때의 실질적인 제한 사항이 string 적용되므로 10GB 파일을 나타내는 데 사용할 Uri 수 없습니다(또는 사용자도 안 됨).
파괴적 변경 유형
이 변경 사항은 행동 변화입니다.
변경 이유
대부분의 HTTP 서버는 요청에서 수락하려는 URL에 엄격한 길이 제한을 적용합니다. 제한은 일반적으로 이전 제한보다 Uri훨씬 낮습니다. 그러나 Uri URI와 유사한 정보에 대한 .NET의 사실상 교환 유형이므로 이전 제한은 API 계약 전체의 Uri 사용을 제거하는 것 외에는 적절한 해결 방법 없이 일부 시나리오에서 사용을 제한했습니다.
대규모 Uri 의 주요 시나리오는 다음과 같습니다.
-
data:uri- Base64에서 인코딩된 임의의 이진 Blob을 포함합니다. HTTP 요청 줄 외부에서 전송될 수 있습니다. 예를 들어 요청 본문의 일부일 수 있으므로 임의로 클 수 있습니다. Uri 는 이제 더 큰 파일이 포함된 데이터 URI를 나타내는 데 사용할 수 있습니다. - 큰 쿼리 문자열입니다. Uri 는 HTTP 요청의 일부로 전송되지 않더라도 시스템 간의 교환 형식으로 사용되는 경우가 많습니다. 사용자 요청 정보는 쿼리 문자열의 일부로 인코딩되는 경우가 많으므로 새 동작을 통해 데이터 양이 늘어나더라도 이러한 시나리오를 사용할 수 있습니다.
권장 작업
대부분의 사용자에게는 작업이 필요하지 않습니다.
입력 유효성 검사의 일부로 길이 제한을 적용하는 경우 Uri 인스턴스를 생성 Uri 하기 전에 단계로서 길이 검사를 수행해야 합니다. 대부분의 HTTP 서버가 실제로 훨씬 더 엄격한 길이 제한을 적용하기 때문에 매우 긴 입력은 이미 HTTP 요청의 일부로 전송될 때 오류가 발생할 가능성이 있었습니다. 시나리오에서 이전보다 훨씬 Uri 더 엄격한 길이 유효성 검사를 수행하는 것이 도움이 될 수 있습니다.
영향을 받는 API
- Uri
- System.Uri.TryCreate
- 인스턴스에 대한 정보를 반환하는 Uri 모든 Uri 멤버는 다음과 같습니다.
.NET