Udostępnij przez


Wycofanie metody rozszerzenia WithOpenApi

Metody WithOpenApi zostały przestarzałe na platformie .NET 10. Wywołanie tych metod powoduje teraz wygenerowanie diagnostyki czasu kompilacji ASPDEPR002 i standardowego Obsolete ostrzeżenia, które stwierdza:

Funkcja WithOpenApi jest przestarzała i zostanie usunięta w przyszłej wersji. Aby uzyskać więcej informacji, zobacz https://aka.ms/aspnet/deprecate/002.

Wersja wprowadzona

.NET 10 (wersja zapoznawcza 7)

Poprzednie zachowanie

Wcześniej można było użyć WithOpenApi metody rozszerzenia bez żadnych ostrzeżeń:

app.MapGet("/weather", () => ...)
   .WithOpenApi();   // No warnings.

Nowe zachowanie

Począwszy od platformy .NET 10, użycie WithOpenApi metody rozszerzenia powoduje wygenerowanie ostrzeżenia kompilatora:

app.MapGet("/weather", () => ...)
   .WithOpenApi();   // Warning ASPDEPR002: WithOpenApi is deprecated...

Jednak to wywołanie nadal się kompiluje i wykonuje.

Typ zmiany przełamującej

Ta zmiana może mieć wpływ na zgodność źródła .

Przyczyna zmiany

WithOpenApi zduplikowana funkcjonalność teraz zapewniana przez wbudowany potok generowania dokumentów OpenAPI. Wycofanie go upraszcza warstwę interfejsu API i przygotowuje do jego ewentualnego usunięcia.

Usuń .WithOpenApi() wywołania z kodu.

  • Jeśli użyłeś Microsoft.AspNetCore.OpenApi do generowania dokumentów, użyj metody rozszerzenia AddOpenApiOperationTransformer<TBuilder>(TBuilder, Func<OpenApiOperation,OpenApiOperationTransformerContext,CancellationToken,Task>).

    Przed:

    using Microsoft.AspNetCore.OpenApi;
    
    var builder = WebApplication.CreateBuilder();
    var app = builder.Build();
    
    app.MapGet("/weather", () => ...)
       .WithOpenApi(operation =>
       {
           // Per-endpoint tweaks
           operation.Summary     = "Gets the current weather report.";
           operation.Description = "Returns a short description and emoji.";
           return operation;
       });
    
    app.Run();
    

    Po:

    using Microsoft.AspNetCore.OpenApi;
    
    var builder = WebApplication.CreateBuilder();
    var app = builder.Build();
    
    app.MapGet("/weather", () => ...)
       .AddOpenApiOperationTransformer((operation, context, ct) =>
       {
           // Per-endpoint tweaks
           operation.Summary     = "Gets the current weather report.";
           operation.Description = "Returns a short description and emoji.";
           return Task.CompletedTask;
       });
    
    app.Run();
    
  • Jeśli używałeś Swashbuckle do generowania dokumentów, użyj API IOperationFilter.

  • Jeśli używałeś NSwag do generowania dokumentów, użyj IOperationProcessor API.

Interfejsy API, których dotyczy problem