Freigeben über


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.