Al cargar archivos de datos con RestSharp a una interfaz REST .Net Core 2.1, aparece este error en algunos archivos:
System.IO.InvalidDataException: Line length limit 100 exceeded.
at Microsoft.AspNetCore.WebUtilities.BufferedReadStream.ReadLineAsync(Int32 lengthLimit, CancellationToken cancellationToken)
at Microsoft.AspNetCore.WebUtilities.MultipartReaderStream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
at Microsoft.AspNetCore.WebUtilities.StreamHelperExtensions.DrainAsync(Stream stream, ArrayPool`1 bytePool, Nullable`1 limit, CancellationToken cancellationToken)
at Microsoft.AspNetCore.WebUtilities.MultipartReader.ReadNextSectionAsync(CancellationToken cancellationToken)
Cuando hago la misma operación con Insomnia, no obtengo ningún error, solo con RestSharp.
He leído aquí https://stackoverflow.com/questions/44642701/microsoft-aspnetcore-webutilities-line-length-limit-100- excedido que hay un problema con los formatos de final de línea, pero este es el único artículo al respecto .
La firma del controlador es muy simple:
[HttpPost, DisableRequestSizeLimit]
public async Task<IActionResult> AddPictureAsync(
IFormFile Picture,
IFormFile Thumbnail,
string Title)
{
y el código a enviar es:
var Request = new RestRequest("picture", Method.POST) { AlwaysMultipartFormData = true };
Request.AddHeader("SessionId", SessionId);
Request.AddFile("Picture", PhotoData.ToArray(), Photo.PhotoUrl);
Request.AddFile("Thumbnail", ThumbnailData, Photo.PhotoUrl.Replace(".jpg", "-t.jpg"));
Request.AddParameter("Title", Photo.Title ?? string.Empty, ParameterType.GetOrPost);
He reemplazado RestSharp por HttpClient; misma llamada, mismos datos y funciona; por lo que el problema está definitivamente en RestSharp.
Parece que tiene que ver con el formato de los datos transmitidos. Lo ejecuto en Mac, por lo que posiblemente el problema planteado en el enlace que proporcioné, con respecto a CRLF esperado al final de los datos, podría ser el problema.
También escribí al proyecto .NET Core y señalaron el mismo problema.
Quizás RestSharp codifica el final de las líneas de manera diferente en Mac.
Bueno, la respuesta a SO es clara. También usamos Environment.LineBreak
pero, por supuesto, esto proviene del entorno del cliente y el servidor puede tener un entorno diferente, por lo que se rompe. Debería resolverse en la próxima versión.
Me gustaría señalarles, caballeros, https://tools.ietf.org/html/rfc2616. La secuencia de caracteres que separa el encabezado y el cuerpo debe ser CRLFCRLF, por lo que \ r \ n \ r \ n, independientemente del sistema desde o hacia el que esté enviando. Cualquier otra cosa y todos los servidores web que cumplan con los estándares (nginx, haproxy, apache, entre otros) no comprenderán la solicitud correctamente.
¿Existe una ETA para esto? ahora mismo tengo que quitar el código de RestSharp para que las llamadas se realicen correctamente.
Se corrigió hace mucho tiempo.
Comentario más útil
¿Existe una ETA para esto? ahora mismo tengo que quitar el código de RestSharp para que las llamadas se realicen correctamente.