Browse Source

Fix xml formatter (#15164)

Cody Robibero 3 days ago
parent
commit
2b94bb54aa
1 changed files with 24 additions and 1 deletions
  1. 24 1
      Jellyfin.Api/Formatters/XmlOutputFormatter.cs

+ 24 - 1
Jellyfin.Api/Formatters/XmlOutputFormatter.cs

@@ -1,4 +1,8 @@
+using System;
 using System.Net.Mime;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc.Formatters;
 
 namespace Jellyfin.Api.Formatters;
@@ -6,7 +10,7 @@ namespace Jellyfin.Api.Formatters;
 /// <summary>
 /// Xml output formatter.
 /// </summary>
-public sealed class XmlOutputFormatter : StringOutputFormatter
+public sealed class XmlOutputFormatter : TextOutputFormatter
 {
     /// <summary>
     /// Initializes a new instance of the <see cref="XmlOutputFormatter"/> class.
@@ -15,5 +19,24 @@ public sealed class XmlOutputFormatter : StringOutputFormatter
     {
         SupportedMediaTypes.Clear();
         SupportedMediaTypes.Add(MediaTypeNames.Text.Xml);
+
+        SupportedEncodings.Add(Encoding.UTF8);
+        SupportedEncodings.Add(Encoding.Unicode);
+    }
+
+    /// <inheritdoc />
+    public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
+    {
+        ArgumentNullException.ThrowIfNull(context);
+        ArgumentNullException.ThrowIfNull(selectedEncoding);
+
+        var valueAsString = context.Object?.ToString();
+        if (string.IsNullOrEmpty(valueAsString))
+        {
+            return;
+        }
+
+        var response = context.HttpContext.Response;
+        await response.WriteAsync(valueAsString, selectedEncoding).ConfigureAwait(false);
     }
 }