System.Web 介面卡
dotnet/systemweb-adapters 存放庫中介面卡的主要使用案例是協助依賴類別庫內 System.Web
類型的開發人員,因為他們想要移至 ASP.NET Core。
介面卡的重要功能是介面卡允許從 ASP.NET Framework 和 ASP.NET Core 專案使用程式庫。 將多個 ASP.NET Framework 應用程式更新為 ASP.NET Core 通常牽涉到中繼狀態,其中並非所有應用程式都已完整更新。 藉由使用 System.Web
介面卡,程式庫可以從 ASP.NET Core 呼叫端和尚未升級 ASP.NET Framework 呼叫端使用。
讓我們看看使用從 .NET Framework 移至 ASP.NET Core 的介面卡範例。
ASP.NET Framework
請考慮執行下列動作的控制器:
public class SomeController : Controller
{
public ActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext.Current);
}
}
接著,在個別的組件中具有邏輯,傳遞該 HttpContext 直到最後為止,有些內部方法會針對它執行一些邏輯,例如:
public class Class2
{
public bool PerformSomeCheck(HttpContext context)
{
return context.Request.Headers["SomeHeader"] == "ExpectedValue";
}
}
ASP.NET Core
若要在 ASP.NET Core 中執行上述邏輯,開發人員必須新增 Microsoft.AspNetCore.SystemWebAdapters
封裝,讓專案能夠在這兩個平台上運作。
程式庫需要更新才能了解介面卡,但新增封裝和重新編譯一樣簡單。 如果這些是系統在 System.Web.dll
上唯一擁有的相依性,則程式庫將能夠以 .NET Standard 2.0 為目標,以在移轉時加速更簡單的組建流程。
ASP.NET Core 中的控制器現在看起來會像這樣:
public class SomeController : Controller
{
[Route("/")]
public IActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext);
}
}
請注意,由於有 HttpContext 屬性,因此可以進行傳遞,但一般看起來相同。 使用隱含轉換,可以將 HttpContext 轉換成介面卡,然後以相同方式透過使用程式碼的層級傳遞。