RDG009: Ungültige geschachtelte AsParameters
Wert | |
---|---|
Regel-ID | RDG009 |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Ursache
Diese Diagnose wird vom Anforderungsdelegat-Generator ausgegeben, wenn ein Endpunkt ungültig geschachtelte [AsParameters]
enthält.
Regelbeschreibung
Typen, die für die Ersatzbindung über das [AsParameters]
-Attribut verwendet werden, dürfen keine geschachtelten Typen enthalten, die ebenfalls mit dem [AsParameters]
-Attribut versehen sind:
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder();
var todos = new[]
{
new Todo(1, "Write tests", DateTime.UtcNow.AddDays(2)),
new Todo(2, "Fix tests",DateTime.UtcNow.AddDays(1))
};
builder.Services.AddSingleton(todos);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/v1/todos/{id}", ([AsParameters] TodoItemRequest request) =>
{
return request.Todos.ToList().Find(todoItem => todoItem.Id == request.Id) is Todo todo
? Results.Ok(todo)
: Results.NotFound();
});
app.Run();
struct TodoItemRequest
{
public int Id { get; set; }
[AsParameters]
public Todo[] Todos { get; set; }
}
internal record Todo(int Id, string Task, DateTime DueDate);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Behandeln von Verstößen
Entfernen Sie das geschachtelte AsParameters
-Attribut:
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder();
var todos = new[]
{
new Todo(1, "Write tests", DateTime.UtcNow.AddDays(2)),
new Todo(2, "Fix tests",DateTime.UtcNow.AddDays(1))
};
builder.Services.AddSingleton(todos);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/v1/todos/{id}", ([AsParameters] TodoItemRequest request) =>
{
return request.Todos.ToList().Find(todoItem => todoItem.Id == request.Id) is Todo todo
? Results.Ok(todo)
: Results.NotFound();
});
app.Run();
struct TodoItemRequest
{
public int Id { get; set; }
//[AsParameters]
public Todo[] Todos { get; set; }
}
internal record Todo(int Id, string Task, DateTime DueDate);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Wann sollten Warnungen unterdrückt werden?
Diese Warnung darf nicht unterdrückt werden.
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für