Skip to content

Commit

Permalink
Add generic variants of ProducesProblem and ProducesValidationProblem (
Browse files Browse the repository at this point in the history
…#56810)

* Add generic variants of ProducesProblem and ProducesValidationProblem

* Centralize const strings for content types
  • Loading branch information
captainsafia authored Jul 17, 2024
1 parent 8b39e65 commit a21c9ed
Show file tree
Hide file tree
Showing 30 changed files with 130 additions and 77 deletions.
2 changes: 1 addition & 1 deletion src/Http/Http.Extensions/src/HttpRequestJsonExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ private static bool HasJsonContentType(this HttpRequest request, out StringSegme
}

// Matches application/json
if (mt.MediaType.Equals(JsonConstants.JsonContentType, StringComparison.OrdinalIgnoreCase))
if (mt.MediaType.Equals(ContentTypeConstants.JsonContentType, StringComparison.OrdinalIgnoreCase))
{
charset = mt.Charset;
return true;
Expand Down
10 changes: 5 additions & 5 deletions src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public static Task WriteAsJsonAsync<TValue>(

options ??= ResolveSerializerOptions(response.HttpContext);

response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset;
response.ContentType = contentType ?? ContentTypeConstants.JsonContentTypeWithCharset;

var startTask = Task.CompletedTask;
if (!response.HasStarted)
Expand Down Expand Up @@ -129,7 +129,7 @@ public static Task WriteAsJsonAsync<TValue>(
{
ArgumentNullException.ThrowIfNull(response);

response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset;
response.ContentType = contentType ?? ContentTypeConstants.JsonContentTypeWithCharset;

var startTask = Task.CompletedTask;
if (!response.HasStarted)
Expand Down Expand Up @@ -182,7 +182,7 @@ public static Task WriteAsJsonAsync(
{
ArgumentNullException.ThrowIfNull(response);

response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset;
response.ContentType = contentType ?? ContentTypeConstants.JsonContentTypeWithCharset;

var startTask = Task.CompletedTask;
if (!response.HasStarted)
Expand Down Expand Up @@ -302,7 +302,7 @@ public static Task WriteAsJsonAsync(

options ??= ResolveSerializerOptions(response.HttpContext);

response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset;
response.ContentType = contentType ?? ContentTypeConstants.JsonContentTypeWithCharset;

var startTask = Task.CompletedTask;
if (!response.HasStarted)
Expand Down Expand Up @@ -365,7 +365,7 @@ public static Task WriteAsJsonAsync(
ArgumentNullException.ThrowIfNull(type);
ArgumentNullException.ThrowIfNull(context);

response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset;
response.ContentType = contentType ?? ContentTypeConstants.JsonContentTypeWithCharset;

var startTask = Task.CompletedTask;
if (!response.HasStarted)
Expand Down
10 changes: 0 additions & 10 deletions src/Http/Http.Extensions/src/JsonConstants.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<Compile Remove="$(RepoRoot)src\Components\Endpoints\src\FormMapping\HttpContextFormValueMapper.cs" LinkBase="SharedFormMapping" />
<Compile Remove="$(RepoRoot)src\Components\Endpoints\src\FormMapping\HttpContextFormDataProvider.cs" LinkBase="SharedFormMapping" />
<Compile Remove="$(RepoRoot)src\Components\Endpoints\src\FormMapping\BrowserFileFromFormFile.cs" LinkBase="SharedFormMapping" />
<Compile Include="$(SharedSourceRoot)ContentTypeConstants.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Http.Extensions/src/RequestDelegateFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public static partial class RequestDelegateFactory
private static readonly MethodInfo AsMemoryMethod = new Func<char[]?, int, int, Memory<char>>(MemoryExtensions.AsMemory).Method;
private static readonly MethodInfo ArrayPoolSharedReturnMethod = typeof(ArrayPool<char>).GetMethod(nameof(ArrayPool<char>.Shared.Return))!;

private static readonly string[] DefaultAcceptsAndProducesContentType = new[] { JsonConstants.JsonContentType };
private static readonly string[] DefaultAcceptsAndProducesContentType = new[] { ContentTypeConstants.JsonContentType };
private static readonly string[] FormFileContentType = new[] { "multipart/form-data" };
private static readonly string[] FormContentType = new[] { "multipart/form-data", "application/x-www-form-urlencoded" };
private static readonly string[] PlaintextContentType = new[] { "text/plain" };
Expand Down
30 changes: 15 additions & 15 deletions src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public async Task WriteAsJsonAsyncGeneric_SimpleValue_JsonResponse()
await context.Response.WriteAsJsonAsync(1);

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

var data = body.ToArray();
Expand All @@ -45,7 +45,7 @@ public async Task WriteAsJsonAsyncGeneric_NullValue_JsonResponse()
await context.Response.WriteAsJsonAsync<Uri?>(value: null);

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);

var data = Encoding.UTF8.GetString(body.ToArray());
Assert.Equal("null", data);
Expand All @@ -65,7 +65,7 @@ public async Task WriteAsJsonAsyncGeneric_WithOptions_JsonResponse()
await context.Response.WriteAsJsonAsync(new int[] { 1, 2, 3 }, options);

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);

var data = Encoding.UTF8.GetString(body.ToArray());
Assert.Equal("[false,true,false]", data);
Expand Down Expand Up @@ -97,7 +97,7 @@ public async Task WriteAsJsonAsyncGeneric_CustomStatusCode_StatusCodeUnchanged()
await context.Response.WriteAsJsonAsync(1);

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status418ImATeapot, context.Response.StatusCode);
}

Expand Down Expand Up @@ -167,7 +167,7 @@ public async Task WriteAsJsonAsync_SimpleValue_JsonResponse()
await context.Response.WriteAsJsonAsync(1, typeof(int));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

var data = body.ToArray();
Expand All @@ -186,7 +186,7 @@ public async Task WriteAsJsonAsync_NullValue_JsonResponse()
await context.Response.WriteAsJsonAsync(value: null, typeof(int?));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);

var data = Encoding.UTF8.GetString(body.ToArray());
Assert.Equal("null", data);
Expand Down Expand Up @@ -249,7 +249,7 @@ public async Task WriteAsJsonAsync_CustomStatusCode_StatusCodeUnchanged()
await context.Response.WriteAsJsonAsync(1, typeof(int));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status418ImATeapot, context.Response.StatusCode);
}

Expand All @@ -265,7 +265,7 @@ public async Task WriteAsJsonAsyncGeneric_AsyncEnumerable()
await context.Response.WriteAsJsonAsync(AsyncEnumerable());

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

Assert.Equal("[1,2]", Encoding.UTF8.GetString(body.ToArray()));
Expand All @@ -290,7 +290,7 @@ public async Task WriteAsJsonAsync_AsyncEnumerable()
await context.Response.WriteAsJsonAsync(AsyncEnumerable(), typeof(IAsyncEnumerable<int>));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

Assert.Equal("[1,2]", Encoding.UTF8.GetString(body.ToArray()));
Expand Down Expand Up @@ -318,7 +318,7 @@ public async Task WriteAsJsonAsyncGeneric_AsyncEnumerable_ClosedConnecton()
await context.Response.WriteAsJsonAsync(AsyncEnumerable());

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

// System.Text.Json might write the '[' before cancellation is observed
Expand Down Expand Up @@ -352,7 +352,7 @@ public async Task WriteAsJsonAsync_AsyncEnumerable_ClosedConnecton()
await context.Response.WriteAsJsonAsync(AsyncEnumerable(), typeof(IAsyncEnumerable<int>));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

// System.Text.Json might write the '[' before cancellation is observed
Expand Down Expand Up @@ -386,7 +386,7 @@ public async Task WriteAsJsonAsync_AsyncEnumerable_UserPassedTokenThrows()
await Assert.ThrowsAnyAsync<OperationCanceledException>(() => context.Response.WriteAsJsonAsync(AsyncEnumerable(), typeof(IAsyncEnumerable<int>), cts.Token));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

// System.Text.Json might write the '[' before cancellation is observed
Expand Down Expand Up @@ -420,7 +420,7 @@ public async Task WriteAsJsonAsyncGeneric_AsyncEnumerable_UserPassedTokenThrows(
await Assert.ThrowsAnyAsync<OperationCanceledException>(() => context.Response.WriteAsJsonAsync(AsyncEnumerable(), cts.Token));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

// System.Text.Json might write the '[' before cancellation is observed
Expand Down Expand Up @@ -454,7 +454,7 @@ public async Task WriteAsJsonAsyncGeneric_WithJsonTypeInfo_JsonResponse()
await context.Response.WriteAsJsonAsync(new int[] { 1, 2, 3 }, (JsonTypeInfo<int[]>)options.GetTypeInfo(typeof(int[])));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);

var data = Encoding.UTF8.GetString(body.ToArray());
Assert.Equal("[1,2,3]", data);
Expand All @@ -475,7 +475,7 @@ public async Task WriteAsJsonAsync_NullValue_WithJsonTypeInfo_JsonResponse()
await context.Response.WriteAsJsonAsync(value : null, options.GetTypeInfo(typeof(Uri)));

// Assert
Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType);
Assert.Equal(ContentTypeConstants.JsonContentTypeWithCharset, context.Response.ContentType);

var data = Encoding.UTF8.GetString(body.ToArray());
Assert.Equal("null", data);
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/AcceptedAtRouteOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status202Accepted, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status202Accepted, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/AcceptedOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status202Accepted, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status202Accepted, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/BadRequestOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status400BadRequest, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status400BadRequest, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/ConflictOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status409Conflict, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status409Conflict, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/CreatedAtRouteOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status201Created, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status201Created, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/CreatedOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status201Created, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status201Created, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/FileContentHttpResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal FileContentHttpResult(
{
FileContents = fileContents;
FileLength = fileContents.Length;
ContentType = contentType ?? HttpResultsHelper.BinaryContentType;
ContentType = contentType ?? ContentTypeConstants.BinaryContentType;
FileDownloadName = fileDownloadName;
EnableRangeProcessing = enableRangeProcessing;
LastModified = lastModified;
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/FileStreamHttpResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ internal FileStreamHttpResult(
FileLength = fileStream.Length;
}

ContentType = contentType ?? HttpResultsHelper.BinaryContentType;
ContentType = contentType ?? ContentTypeConstants.BinaryContentType;
FileDownloadName = fileDownloadName;
EnableRangeProcessing = enableRangeProcessing;
LastModified = lastModified;
Expand Down
9 changes: 1 addition & 8 deletions src/Http/Http.Results/src/HttpResultsHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,6 @@ namespace Microsoft.AspNetCore.Http;

internal static partial class HttpResultsHelper
{
internal const string BinaryContentType = "application/octet-stream";
internal const string DefaultContentType = "text/plain; charset=utf-8";
internal const string ProblemDetailsContentType = "application/problem+json";

internal static IEnumerable<string> ApplicationJsonContentTypes { get; } = ["application/json"];
internal static IEnumerable<string> ProblemDetailsContentTypes { get; } = [ProblemDetailsContentType];

private static readonly Encoding DefaultEncoding = Encoding.UTF8;

[UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCode",
Expand Down Expand Up @@ -77,7 +70,7 @@ public static Task WriteResultAsContentAsync(
ResponseContentTypeHelper.ResolveContentTypeAndEncoding(
contentType,
response.ContentType,
(DefaultContentType, DefaultEncoding),
(ContentTypeConstants.DefaultContentType, DefaultEncoding),
ResponseContentTypeHelper.GetEncoding,
out var resolvedContentType,
out var resolvedContentTypeEncoding);
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/InternalServerErrorOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status500InternalServerError, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status500InternalServerError, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
<Compile Include="$(SharedSourceRoot)ApiExplorerTypes\*.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)Json\JsonSerializerExtensions.cs" LinkBase="Shared"/>
<Compile Include="$(SharedSourceRoot)RouteValueDictionaryTrimmerWarning.cs" LinkBase="Shared" />
<Compile Include="$(SharedSourceRoot)ContentTypeConstants.cs" LinkBase="Shared" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/NotFoundOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status404NotFound, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status404NotFound, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/OkOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,6 @@ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, Endpoi
ArgumentNullException.ThrowIfNull(method);
ArgumentNullException.ThrowIfNull(builder);

builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status200OK, HttpResultsHelper.ApplicationJsonContentTypes));
builder.Metadata.Add(ProducesResponseTypeMetadata.CreateUnvalidated(typeof(TValue), StatusCodes.Status200OK, ContentTypeConstants.ApplicationJsonContentTypes));
}
}
2 changes: 1 addition & 1 deletion src/Http/Http.Results/src/PhysicalFileHttpResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ internal PhysicalFileHttpResult(
EntityTagHeaderValue? entityTag = null)
{
FileName = fileName;
ContentType = contentType ?? HttpResultsHelper.BinaryContentType;
ContentType = contentType ?? ContentTypeConstants.BinaryContentType;
FileDownloadName = fileDownloadName;
EnableRangeProcessing = enableRangeProcessing;
LastModified = lastModified;
Expand Down
Loading

0 comments on commit a21c9ed

Please sign in to comment.