Condividi tramite


Middleware: nuovo overload Use

È stato introdotto un nuovo overload di app.Use. Se si chiama app.Use ma non si chiama mai il middleware next, ora si otterrà l'errore del compilatore CS0121:

La chiamata è ambigua tra i metodi o le proprietà seguenti: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' e 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'

Per risolvere l'errore, usare app.Run anziché app.Use.

Per informazioni, vedere Problema di GitHub dotnet/aspnetcore#32020.

Versione introdotta

ASP.NET Core 6.0

Comportamento precedente

app.Use(async (context, next) =>
{
    await next();
});

or

app.Use(async (context, next) =>
{
    await SomeAsyncWork();
    // next not called...
});

Nuovo comportamento

È ora possibile passare context al next delegato:

app.Use(async (context, next) =>
{
    await next(context);
});

Usare app.Run quando il middleware non chiama mai next:

app.Run(async (context) =>
{
    await SomeAsyncWork();
    // next never called
});

Motivo della modifica

Il precedente metodo Use alloca due oggetti per richiesta. Il nuovo overload evita queste allocazioni con una piccola modifica al modo in cui si invoca il middleware next.

Se viene visualizzato un errore di compilazione, significa che si sta chiamando app.Use senza usare il next delegato. Passare a app.Run per correggere l'errore.

API interessate

Nessuno.