Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ public void AddsMultipleRequestFormatsFromMetadata()
public void AddsMultipleRequestFormatsFromMetadataWithRequestTypeAndOptionalBodyParameter()
{
var apiDescription = GetApiDescription(
[Consumes(typeof(InferredJsonClass), "application/custom0", "application/custom1", IsOptional = true)]
[Consumes<InferredJsonClass>("application/custom0", "application/custom1", IsOptional = true)]
() =>
{ });

Expand All @@ -119,7 +119,7 @@ public void AddsMultipleRequestFormatsFromMetadataWithRequestTypeAndOptionalBody
public void AddsMultipleRequestFormatsFromMetadataWithRequiredBodyParameter()
{
var apiDescription = GetApiDescription(
[Consumes(typeof(InferredJsonClass), "application/custom0", "application/custom1", IsOptional = false)]
[Consumes<InferredJsonClass>("application/custom0", "application/custom1", IsOptional = false)]
(InferredJsonClass fromBody) =>
{ }, httpMethods: ["POST"]);

Expand Down
19 changes: 19 additions & 0 deletions src/Mvc/Mvc.Core/src/ConsumesOfTAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.AspNetCore.Mvc;

/// <inheritdoc />
/// <typeparam name="T">The <see cref="Type"/> of object that is going to be read from the request.</typeparam>
public class ConsumesAttribute<T> : ConsumesAttribute
{
/// <summary>
/// Creates a new instance of <see cref="ConsumesAttribute{T}"/>.
/// </summary>
/// <param name="contentType">The request content type.</param>
/// <param name="otherContentTypes">The additional list of allowed request content types.</param>
public ConsumesAttribute(string contentType, params string[] otherContentTypes)
: base(typeof(T), contentType, otherContentTypes)
{
}
}
2 changes: 2 additions & 0 deletions src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@
*REMOVED*static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcBuilder! builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder!
*REMOVED*static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder! builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder!
*REMOVED*virtual Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions<TOptions>.PostConfigure(string? name, TOptions! options) -> void
Microsoft.AspNetCore.Mvc.ConsumesAttribute<T>
Microsoft.AspNetCore.Mvc.ConsumesAttribute<T>.ConsumesAttribute(string! contentType, params string![]! otherContentTypes) -> void
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ public async Task GetRequestBody_IFormFileHandlesConsumesAttribute()
var builder = CreateBuilder();

// Act
builder.MapPost("/", [Consumes(typeof(IFormFile), "application/magic-foo-content-type")] (IFormFile formFile) => { });
builder.MapPost("/", [Consumes<IFormFile>("application/magic-foo-content-type")] (IFormFile formFile) => { });

// Assert
await VerifyOpenApiDocument(builder, document =>
Expand Down Expand Up @@ -364,7 +364,7 @@ public async Task GetRequestBody_HandlesJsonBodyWithConsumesAttribute()
var builder = CreateBuilder();

// Act
builder.MapPost("/", [Consumes(typeof(string), "application/magic-foo-content-type")] (string name) => { });
builder.MapPost("/", [Consumes<string>("application/magic-foo-content-type")] (string name) => { });

// Assert
await VerifyOpenApiDocument(builder, document =>
Expand Down Expand Up @@ -1245,7 +1245,7 @@ public async Task GetRequestBody_HandlesJsonPatchBodyWithConsumesAttribute()
var builder = CreateBuilder();

// Act
builder.MapPatch("/", [Consumes(typeof(JsonPatchDocument), "application/vnd.github.patch+json")] (JsonPatchDocument patch) => { });
builder.MapPatch("/", [Consumes<JsonPatchDocument>("application/vnd.github.patch+json")] (JsonPatchDocument patch) => { });

// Assert
await VerifyOpenApiDocument(builder, document =>
Expand Down Expand Up @@ -1375,7 +1375,7 @@ public async Task GetRequestBody_HandlesGenericJsonPatchBodyWithConsumesAttribut
var builder = CreateBuilder();

// Act
builder.MapPatch("/", [Consumes(typeof(JsonPatchDocument<JsonPatchModel>), "application/vnd.github.patch+json")] (JsonPatchDocument<JsonPatchModel> patch) => { });
builder.MapPatch("/", [Consumes<JsonPatchDocument<JsonPatchModel>>("application/vnd.github.patch+json")] (JsonPatchDocument<JsonPatchModel> patch) => { });

// Assert
await VerifyOpenApiDocument(builder, document =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public void AddsMultipleRequestFormatsFromMetadata()
public void AddsMultipleRequestFormatsFromMetadataWithRequestTypeAndOptionalBodyParameter()
{
var operation = GetOpenApiOperation(
[Consumes(typeof(InferredJsonClass), "application/custom0", "application/custom1", IsOptional = true)] () => { });
[Consumes<InferredJsonClass>("application/custom0", "application/custom1", IsOptional = true)] () => { });
var request = operation.RequestBody;
Assert.NotNull(request);
Assert.Equal(2, request.Content.Count);
Expand All @@ -131,7 +131,7 @@ public void AddsMultipleRequestFormatsFromMetadataWithRequestTypeAndOptionalBody
public void AddsMultipleRequestFormatsFromMetadataWithRequiredBodyParameter()
{
var operation = GetOpenApiOperation(
[Consumes(typeof(InferredJsonClass), "application/custom0", "application/custom1", IsOptional = false)] (InferredJsonClass fromBody) => { });
[Consumes<InferredJsonClass>("application/custom0", "application/custom1", IsOptional = false)] (InferredJsonClass fromBody) => { });

var request = operation.RequestBody;
Assert.NotNull(request);
Expand Down
Loading