Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los métodos que crean instancias de Uri (constructores y métodos de factoría TryCreate) han limitado históricamente la longitud de la cadena de URI a unos 65 000 caracteres (los límites exactos variaron en función del formato de entrada, ligeramente). Estos límites se han levantado de modo que prácticamente no haya restricciones superiores sobre la duración que pueden tener las instancias Uri.
Versión introducida
.NET 10
Comportamiento anterior
Anteriormente, no era posible crear una Uri instancia cuya longitud superaba alrededor de 65 000 caracteres. El código como el ejemplo siguiente produjo un UriFormatException con el mensaje "URI no válido: la cadena de URI es demasiado larga".
new Uri($"https://host/{new string('a', 100_000)}");
Nuevo comportamiento
A partir de .NET 10, Uri ahora se pueden crear instancias que contengan grandes cantidades de datos. Por ejemplo:
string largeQuery = ...;
return new Uri($"https://someService/?query={Uri.EscapeDataString(largeQuery)}");
Las restricciones eliminadas se aplican principalmente a rutas de acceso, consultas y fragmentos como los componentes más prácticos para llevar grandes cantidades de datos. Los componentes como el esquema y el host pueden seguir aplicando algunos límites de longitud. Las limitaciones prácticas a medida que se aproximan a los límites de longitud de string también se aplican, por lo que no puede (ni debería) usar Uri para representar un archivo de 10 GB.
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
La mayoría de los servidores HTTP aplican restricciones estrictas de longitud en las direcciones URL que están dispuestos a aceptar en las solicitudes. Los límites suelen ser mucho más bajos que Urilos límites anteriores. Sin embargo, dado que Uri es el tipo de intercambio de facto en .NET para información similar a URI, los límites anteriores limitaron su uso en algunos escenarios sin buenas soluciones alternativas, excepto eliminar el uso de Uri en todos los contratos de API.
Los principales escenarios de gran tamaño Uri son:
-
data:uris, que contienen objetos binarios arbitrarios codificados en Base64. Pueden transmitirse fuera de la línea de solicitud HTTP. Por ejemplo, podrían formar parte del cuerpo de la solicitud y, por tanto, pueden ser arbitrariamente grandes. Uri ahora se puede usar para representar los URI de datos que contienen archivos más grandes. - Cadenas de consulta grandes. Uri a menudo se usa como un tipo de intercambio entre sistemas incluso si nunca se enviará como parte de una solicitud HTTP. La información de solicitud de usuario se suele codificar como parte de la cadena de consulta, por lo que el nuevo comportamiento permite estos escenarios incluso a medida que crece la cantidad de datos.
Acción recomendada
Para la mayoría de los usuarios, no se requiere ninguna acción.
Si confía en Uri para imponer restricciones de longitud como parte de la validación de la entrada, ahora debe realizar la comprobación de longitud usted mismo, preferiblemente como un paso antes de construir la instancia Uri. Dado que la mayoría de los servidores HTTP aplican límites de longitud mucho más estrictos en la práctica, es probable que las entradas muy largas ya produzcan errores cuando se envían como parte de una solicitud HTTP. Es posible que el escenario se beneficie de realizar una validación de longitud aún más estricta de la que Uri había hecho anteriormente.
Las APIs afectadas
- Uri
- System.Uri.TryCreate
- Todos los Uri miembros que devuelven información sobre la Uri instancia, como: