- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 159
Closed
Description
SUMMARY
First of all Great work with Integrating Open.Api and forming Swagger UI. I have a question concerning the supported media type we used so far: application/vnd.api+json.
DETAILS
I noticed that when I add the Swashbuckle prerelease package and I include it in the UI I have a problem with all my existing integrations. The reason appears to be the Content-Type of the request.
In all my current integrations I used this request Header:
Content-Type: application/vnd.api+json
When I Swashbuckle in API I get Status Code: 415 - Unsupported Media Type
The only way it works is if I set:
Content-Type: application/vnd.api+json; ext=openapi
Am I missing any configuration in order not to break compatibility with previous integrations while using Swagger?
STEPS TO REPRODUCE
- Updated to JsonApiDotNetCore and JsonApiDotNetCore.OpenApi.Swashbuckle.
- Include it in the code as mentioned in the documentation (I will provide the full Extension Method I created)
- Run Solution, open Swagger Doc, try request (Executes successfully)
- Open Postman with the same request and authentication but use the following header: Content-Type: application/vnd.api+json
- Error Response: 415 - Unsupported Media Type
internal static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services, IConfiguration configuration)
{
    services.AddOpenApiForJsonApi(options =>
    {
        var currentNs = configuration.GetCurrentNamespace();
        currentNs = string.IsNullOrEmpty(currentNs) ? currentNs : $"/{currentNs}";
        options.SwaggerDoc("v1", new OpenApiInfo { Title = "External Services", Version = "v1" });
        options.AddServer(new OpenApiServer { Url = $"{currentNs}/api/externalservices" });
        options.AddSwaggerAuth();
        options.TagActionsBy(apiDesc =>
        {
            var controllerType = apiDesc.ActionDescriptor.EndpointMetadata
             .OfType<DisplayNameAttribute>()
             .FirstOrDefault()?.DisplayName;
            return new List<string> { controllerType ?? apiDesc.ActionDescriptor.RouteValues["controller"] };
        });
        options.DocInclusionPredicate((name, api) => true);
        options.OperationFilter<DefaultApiVersionFilter>();
    });
    return services;
}
internal static SwaggerGenOptions AddSwaggerAuth(this SwaggerGenOptions options)
{
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.Http,
        Scheme = "bearer",
        BearerFormat = "JWT",
        Description = "Use JWT provided by Identity Service."
    });
    options.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            Array.Empty<string>()
        }
    });
    return options;
}
VERSIONS USED
- JsonApiDotNetCore version: 5.7.1
- JsonApiDotNetCore.OpenApi.Swashbuckle version: 5.7.1-preview.2
- .NET version: 8.0