diff options
| author | Bond-009 <bond.009@outlook.com> | 2023-06-10 15:01:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-10 07:01:47 -0600 |
| commit | 898bb955641e9ddfe5347d4406960f363b100eac (patch) | |
| tree | 4c677805df8534961ed2eae30faebceb566dfb59 | |
| parent | a5005e3d01fe98364fd3449e8778bc3370ad0e65 (diff) | |
Fix InvalidOpEx while trying to read HttpResponseContent 2x (#9861)
| -rw-r--r-- | Emby.Dlna/PlayTo/DlnaHttpClient.cs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Emby.Dlna/PlayTo/DlnaHttpClient.cs b/Emby.Dlna/PlayTo/DlnaHttpClient.cs index 4e9903f26..8b983e9e3 100644 --- a/Emby.Dlna/PlayTo/DlnaHttpClient.cs +++ b/Emby.Dlna/PlayTo/DlnaHttpClient.cs @@ -49,20 +49,24 @@ namespace Emby.Dlna.PlayTo private async Task<XDocument?> SendRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) { - using var response = await _httpClientFactory.CreateClient(NamedClient.Dlna).SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var client = _httpClientFactory.CreateClient(NamedClient.Dlna); + using var response = await client.SendAsync(request, cancellationToken).ConfigureAwait(false); response.EnsureSuccessStatusCode(); - await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); + await using MemoryStream ms = new MemoryStream(); + await response.Content.CopyToAsync(ms, cancellationToken).ConfigureAwait(false); try { return await XDocument.LoadAsync( - stream, + ms, LoadOptions.None, cancellationToken).ConfigureAwait(false); } catch (XmlException) { // try correcting the Xml response with common errors - var xmlString = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false); + ms.Position = 0; + using StreamReader sr = new StreamReader(ms); + var xmlString = await sr.ReadToEndAsync(cancellationToken).ConfigureAwait(false); // find and replace unescaped ampersands (&) xmlString = EscapeAmpersandRegex().Replace(xmlString, "&"); @@ -70,7 +74,7 @@ namespace Emby.Dlna.PlayTo try { // retry reading Xml - var xmlReader = new StringReader(xmlString); + using var xmlReader = new StringReader(xmlString); return await XDocument.LoadAsync( xmlReader, LoadOptions.None, |
