RDG010: InvalidAsParameters mit Nullwert
Wert | |
---|---|
Regel-ID | RDG010 |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Ursache
Diese Diagnose wird vom Anforderungsdelegat-Generator ausgegeben, wenn ein Endpunkt einen Routenhandler mit einem Parameter enthält, der mit dem [AsParameters]
-Attribut kommentiert wird, das als Nullwert gekennzeichnet ist.
Regelbeschreibung
Die Bindung von einem Ersatz über das [AsParameters]
-Attribut in minimalen APIs unterstützt nur Typen, die keine Nullwerte zulässt.
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/todos/{id}", ([AsParameters] TodoRequest? request)
=> Results.Ok(new Todo(request!.Id)));
app.Run();
public record TodoRequest(HttpContext HttpContext, [FromRoute] int Id);
public record Todo(int Id);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Behandeln von Verstößen
Deklarieren Sie den Parameter als nicht Nullwerte zulassend.
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/todos/{id}", ([AsParameters] TodoRequest request)
=> Results.Ok(new Todo(request.Id)));
app.Run();
public record TodoRequest(HttpContext HttpContext, [FromRoute] int Id);
public record Todo(int Id);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Wann sollten Warnungen unterdrückt werden?
Diese Warnung sollte nicht unterdrückt werden. Das Unterdrücken der Warnung führt zu einer Laufzeitausnahme, die mit der gleichen Warnung ausgelöst wurde.
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