| File: Formatters\StringOutputFormatter.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text; using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Mvc.Formatters; /// <summary> /// A <see cref="TextOutputFormatter"/> for simple text content. /// </summary> public class StringOutputFormatter : TextOutputFormatter { /// <summary> /// Creates a new <see cref="StringOutputFormatter"/> that only supports plain text encoded as <see cref="P:System.Text.Encoding.UTF8" /> /// or <see cref="P:System.Text.Encoding.Unicode" />. /// </summary> public StringOutputFormatter() { SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); SupportedMediaTypes.Add("text/plain"); } /// <summary> /// Verifies that the object to be formatted is a <see langword="string" /> and proceeds with the standard checks of /// <see cref="M:Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.CanWriteResult(OutputFormatterCanWriteContext)" />. /// </summary> public override bool CanWriteResult(OutputFormatterCanWriteContext context) { ArgumentNullException.ThrowIfNull(context); if (context.ObjectType == typeof(string) || context.Object is string) { // Call into base to check if the current request's content type is a supported media type. return base.CanWriteResult(context); } return false; } /// <inheritdoc/> public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding encoding) { ArgumentNullException.ThrowIfNull(context); ArgumentNullException.ThrowIfNull(encoding); var valueAsString = (string?)context.Object; if (string.IsNullOrEmpty(valueAsString)) { return Task.CompletedTask; } var response = context.HttpContext.Response; return response.WriteAsync(valueAsString, encoding); } }