-
Notifications
You must be signed in to change notification settings - Fork 25.1k
Description
Description
[Enter feedback here]
Error
System.InvalidOperationException: Maximum validation depth of 32 exceeded at 'SerializerOptions.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default.Default' in 'JsonSerializerOptions'. This is likely caused by a circular reference in the object graph. Consider increasing the MaxDepth in ValidationOptions if deeper validation is required.
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatablePropertyInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidatableParameterInfo.ValidateAsync(Object value, ValidateContext context, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.Validation.ValidationEndpointFilterFactory.<>c__DisplayClass0_0.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Http.RequestDelegateFactory.g__ExecuteAwaited|129_0(ValueTask1 valueTask, HttpContext httpContext, JsonTypeInfo1 jsonTypeInfo)
at Microsoft.AspNetCore.Http.RequestDelegateFactory.<>c__DisplayClass102_2.<b__2>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
HEADERS
Accept: /
Connection: keep-alive
Host: localhost:5113
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: en-GB,en;q=0.8
Content-Type: application/json
Origin: http://localhost:5113
Referer: http://localhost:5113/scalar/
Content-Length: 58
sec-ch-ua-platform: "Linux"
sec-ch-ua: "Not)A;Brand";v="8", "Chromium";v="138", "Brave";v="138"
sec-ch-ua-mobile: ?0
Sec-GPC: 1
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Smart.Management.Sprocket.Api</RootNamespace>
<AssemblyName>Smart.Management.Sprocket.Api</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.JsonPatch.SystemTextJson" Version="10.0.0-preview.5.25277.114" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0-preview.5.25277.114"/>
<PackageReference Include="Scalar.AspNetCore" Version="2.5.3" />
<PackageReference Include="Asp.Versioning.Mvc" Version="8.1.0" />
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
<PackageReference Include="ToolBox.Framework.Hashicorp.Vault.VaultSharp.Extensions.Configuration" Version="0.1.12" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Api.Contracts\Api.Contracts.csproj" />
<ProjectReference Include="..\Infrastructure.CrossCutting\Infrastructure.CrossCutting.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="V1\Common\" />
</ItemGroup>
Request
public class GalleryOfApps
{
public Ulid Id { get; set; }
public string Image { get; set; }
public string Title { get; set; }
public string SubTitle { get; set; }
public string Description { get; set; }
public string Link { get; set; }
public int Order { get; set; }
public bool IsActive { get; set; }
public DateTime CreateDateUtc { get; set; }
public DateTime ModifiedDateUtc { get; set; }
}
public class UpdateRequest
{
public JsonPatchDocument GalleryOfAppsPatchDocument { get; set; }
}
-- EndPint
public static class GalleryOfAppsEndpoints
{
public static WebApplication GalleryOfAppEndpoints(this WebApplication app, ApiVersionSet apiVersionSet)
{
var root = app.MapGroup("/api/v{version:apiVersion}/GalleryOfApp")
.WithTags("galleryofapp")
.WithApiVersionSet(apiVersionSet)
.MapToApiVersion(1)
.WithOpenApi();
_ = root.MapPost("/", async (string id
) =>
{
var patchDocument = new JsonPatchDocument<GalleryOfApps>();
patchDocument.Replace(x => x.Title, "Added Title");
var test = JsonSerializer.Serialize(patchDocument);
return Results.Accepted();
})
.Produces(StatusCodes.Status201Created)
.ProducesProblem(StatusCodes.Status400BadRequest)
.ProducesProblem(StatusCodes.Status401Unauthorized)
.ProducesProblem(StatusCodes.Status403Forbidden)
.ProducesProblem(StatusCodes.Status500InternalServerError)
.ProducesValidationProblem();
_ = root.MapPatch("/{id}", async (
string id,
[FromBody] JsonPatchDocument<GalleryOfApps> updateRequest) =>
{
var patchDocument = new JsonPatchDocument<GalleryOfApps>();
patchDocument.Replace(x => x.Title, "Added Title");
var test = JsonSerializer.Serialize(patchDocument);
// var updateInput = updateRequestConverter.ToInput(id,updateRequest);
// await updateInteractor.ExecuteAsync(updateInput);
// return updatePresenter.ResultModels;
return new PageFilter();
})
.Produces<GalleryOfApps>(StatusCodes.Status204NoContent)
.ProducesProblem(StatusCodes.Status400BadRequest)
.ProducesProblem(StatusCodes.Status401Unauthorized)
.ProducesProblem(StatusCodes.Status403Forbidden)
.ProducesProblem(StatusCodes.Status500InternalServerError)
. DisableAntiforgery();
return app;
}
}
-- Modules
internal static class MinimalApiExtensions
{
internal static WebApplication AddMapEndpoints(this WebApplication webApplication, List apiVersions)
{
var apiVersionSet = webApplication.NewApiVersionSet()
.HasApiVersions(apiVersions)
.ReportApiVersions()
.Build();
webApplication
.GalleryOfAppEndpoints(apiVersionSet);
return webApplication;
}
}
internal static class ScalarExtensions
{
internal static IServiceCollection AddScalar(this IServiceCollection services, List apiVersions)
{
var application = services
.BuildServiceProvider()
.GetRequiredService()
.Get();
foreach (var version in apiVersions)
{
services.Configure<ScalarOptions>(options => options.AddDocument($"v{version.MajorVersion}", $"v{version.MajorVersion}"));
services.AddOpenApi($"v{version.MajorVersion}", options =>
{
options.OpenApiVersion = OpenApiSpecVersion.OpenApi3_0;
// Add document transformer to customize OpenApiInfo
options.AddDocumentTransformer((document, context, ct) =>
{
var provider = context.ApplicationServices.GetRequiredService<IApiVersionDescriptionProvider>();
var description = provider.ApiVersionDescriptions.FirstOrDefault(d => d.GroupName == context.DocumentName);
document.Info = new OpenApiInfo
{
Title = "Smart Management Sprocket",
Version = description?.ApiVersion.ToString() ?? context.DocumentName,
Description = description?.IsDeprecated == true ? "This API version is deprecated." : null
};
return Task.CompletedTask;
});
});
}
return services;
}
internal static IApplicationBuilder ConfigureAddScalar(this WebApplication app)
{
var applicationSettings = app.Configuration.Get<ApplicationSettings>();
// app.UseAuthentication();
// app.UseAuthorization();
app.MapOpenApi();
app.MapScalarApiReference((options, context) =>
{
options
.WithTheme(ScalarTheme.DeepSpace)
.WithLayout(ScalarLayout.Modern)
.WithFavicon("https://scalar.com/logo-light.svg")
.WithDefaultHttpClient(ScalarTarget.CSharp, ScalarClient.HttpClient);
});
return app;
}
}
internal static class VersioningExtensions
{
internal static IServiceCollection AddVersioning(this IServiceCollection services)
{
services.AddApiVersioning(options =>
{
options.DefaultApiVersion = new ApiVersion(1);
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.ApiVersionReader = new UrlSegmentApiVersionReader();
})
.AddApiExplorer(options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
return services;
}
}
internal static class WebFrameworkExtensions
{
internal static IServiceCollection AddWebFramework(this IServiceCollection services)
{
services
.AddRouting(options => { options.LowercaseUrls = true; })
.Configure(options =>
{
// options.SerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
// options.SerializerOptions.WriteIndented = true;
// options.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
// options.SerializerOptions.MaxDepth = 64;
options.SerializerOptions.MaxDepth = 64;
});
services.AddValidation();
// Add HTTP logging services
services.AddHttpLogging(logging =>
{
// Configure what to log
logging.LoggingFields = Microsoft.AspNetCore.HttpLogging.HttpLoggingFields.All;
logging.RequestHeaders.Add("Authorization");
logging.ResponseHeaders.Add("Content-Type");
logging.MediaTypeOptions.AddText("application/json");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
services.AddHttpContextAccessor();
return services;
}
}
Page URL
https://learn.microsoft.com/en-us/aspnet/core/web-api/jsonpatch?view=aspnetcore-10.0
Content source URL
https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/web-api/jsonpatch.md
Document ID
6a88d237-1a03-b865-e3c5-20ceedef2a1f
Platform Id
54f6475a-b72c-2ccc-3ab8-5326d9d05c50
Article author
Metadata
- ID: 593f528c-61b9-7021-335d-c1c0ec1814d1
- PlatformId: 54f6475a-b72c-2ccc-3ab8-5326d9d05c50
- Service: aspnet-core
- Sub-service: web-api