From c156ec625cecd3a6eead34b09e92362977eba1d1 Mon Sep 17 00:00:00 2001 From: Christian Weiss Date: Fri, 1 Mar 2019 16:24:57 +0100 Subject: [PATCH] Place application/json first for easier usage of Swagger UI --- .../MeceqsDocumentFilter.cs | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Meceqs.AspNetCore.Swagger/MeceqsDocumentFilter.cs b/src/Meceqs.AspNetCore.Swagger/MeceqsDocumentFilter.cs index 7aef4fa..08ed2bd 100644 --- a/src/Meceqs.AspNetCore.Swagger/MeceqsDocumentFilter.cs +++ b/src/Meceqs.AspNetCore.Swagger/MeceqsDocumentFilter.cs @@ -1,4 +1,5 @@ -using Meceqs.AspNetCore.Receiving; +using System; +using Meceqs.AspNetCore.Receiving; using Meceqs.Transport; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -13,6 +14,8 @@ namespace Meceqs.AspNetCore.Swagger public class MeceqsDocumentFilter : IDocumentFilter { + private const string JsonContentType = "application/json"; + private readonly ReceiveEndpointOptions _transportOptions; private readonly IOptionsMonitor _receiverOptions; private readonly IMessagePathConvention _messagePathConvention; @@ -63,13 +66,11 @@ private void AddMessageType(MessageMetadata messageType, SwaggerDocument documen // Content Types - var consumeTypes = _serializationProvider.GetSupportedContentTypes(messageType.MessageType); - operation.Consumes = new List(consumeTypes); + operation.Consumes = GetOrderedContentTypes(messageType.MessageType); if (messageType.ResponseType != typeof(void)) { - var producesTypes = _serializationProvider.GetSupportedContentTypes(messageType.ResponseType); - operation.Produces = new List(producesTypes); + operation.Produces = GetOrderedContentTypes(messageType.ResponseType); } // Parameters @@ -127,5 +128,19 @@ private void AddMessageType(MessageMetadata messageType, SwaggerDocument documen Post = operation }); } + + private List GetOrderedContentTypes(Type objectType) + { + var contentTypes = _serializationProvider.GetSupportedContentTypes(objectType).ToList(); + + // If JSON is supported, we place it at the beginning so that the Swagger UI automatically selects it. + // This makes using the UI much easier if you have other non-textual serializers. + if (contentTypes.Count > 1 && contentTypes.Remove(JsonContentType)) + { + contentTypes.Insert(0, JsonContentType); + } + + return contentTypes; + } } }