값 | |
---|---|
규칙 ID | RDG002 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
원인
이 진단은 엔드포인트에 정적으로 분석할 수 없는 경로 처리기가 포함된 경우 요청 대리자 생성기에서 내보냅니다.
규칙 설명
요청 대리자 생성기는 컴파일 시간에 실행되며 앱에서 경로 처리기를 정적으로 분석할 수 있어야 합니다. 현재 구현은 람다 식, 메서드 그룹 참조 또는 읽기 전용 필드 또는 변수에 대한 참조로 제공되는 경로 처리기만 지원합니다.
다음 코드는 경로 처리기가 메서드에 대한 참조로 제공되므로 RDG002 경고를 생성합니다.
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
var del = Wrapper.GetTodos;
app.MapGet("/v1/todos", del);
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
class Wrapper
{
public static Func<IResult> GetTodos = () =>
Results.Ok(new Todo(1, "Write test fix"));
}
위반 문제를 해결하는 방법
인라인 람다와 같은 지원되는 구문을 사용하여 경로 처리기를 선언합니다.
using System.Text.Json.Serialization;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
var app = builder.Build();
app.MapGet("/v1/todos", () => Results.Ok(new Todo(1, "Write tests")));
app.Run();
record Todo(int Id, string Task);
[JsonSerializable(typeof(Todo[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
경고를 표시하지 않는 경우
이 경고는 안전하게 억제할 수 있습니다. 표시되지 않으면 프레임워크는 런타임에 요청 대리자를 생성하는 것으로 돌아갑니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
ASP.NET Core