Condividi tramite


Schede System.Web

Il caso d'uso principale degli adattatori nel repository dotnet/systemweb-adapters consiste nell'aiutare gli sviluppatori che hanno assunto una dipendenza dai System.Web tipi all'interno delle librerie di classi quando vogliono passare a ASP.NET Core.

Una funzionalità importante degli adattatori è che gli adattatori consentono l'uso della libreria sia da ASP.NET Framework che da ASP.NET progetti Core. L'aggiornamento di più app ASP.NET Framework a ASP.NET Core comporta spesso stati intermedi in cui non tutte le app sono state completamente aggiornate. Usando gli System.Web adattatori, la libreria può essere usata sia dai chiamanti ASP.NET Core che dai chiamanti di ASP.NET Framework che non sono stati aggiornati.

Di seguito viene illustrato un esempio che usa gli adattatori che passano da .NET Framework a ASP.NET Core.

Framework ASP.NET

Si consideri un controller che esegue operazioni come:

public class SomeController : Controller
{
  public ActionResult Index()
  {
    SomeOtherClass.SomeMethod(HttpContext.Current);
  }
}

che ha quindi la logica in un assembly separato passandola HttpContext fino alla fine, un metodo interno esegue una certa logica su di esso, ad esempio:

public class Class2
{
  public bool PerformSomeCheck(HttpContext context)
  {
    return context.Request.Headers["SomeHeader"] == "ExpectedValue";
  }
}

ASP.NET Core

Per eseguire la logica precedente in ASP.NET Core, uno sviluppatore dovrà aggiungere il Microsoft.AspNetCore.SystemWebAdapters pacchetto, che consentirà ai progetti di funzionare su entrambe le piattaforme.

Le librerie devono essere aggiornate per comprendere gli adattatori, ma sarà semplice come aggiungere il pacchetto e ricompilare. Se si tratta delle uniche dipendenze di un sistema in System.Web.dll, le librerie saranno in grado di usare .NET Standard 2.0 per facilitare un processo di compilazione più semplice durante la migrazione.

Il controller in ASP.NET Core avrà ora un aspetto simile al seguente:

public class SomeController : Controller
{
  [Route("/")]
  public IActionResult Index()
  {
    SomeOtherClass.SomeMethod(HttpContext);
  }
}

Si noti che poiché c'è una HttpContext proprietà, possono passare attraverso, ma in genere ha lo stesso aspetto. Usando le conversioni implicite, è possibile convertire l'oggetto HttpContext nell'adattatore che può quindi essere passato attraverso i livelli che utilizzano il codice nello stesso modo.

Vedi anche