Pokyny k používání
Microsoft.AspNetCore.SystemWebAdapters
poskytuje emulační vrstvu pro napodobování chování z architektury ASP.NET na ASP.NET Core. Níže jsou uvedeny některé pokyny pro některé aspekty při jejich použití:
HttpContext
životnost
Adaptéry jsou podporovány, které HttpContext nelze použít po dobu životnosti požadavku. Proto při HttpContext spuštění na ASP.NET Core nelze použít i po požadavku, zatímco v ASP.NET Framework by fungovala někdy. Vyvolá ObjectDisposedException se v případech, kdy se použije po ukončení požadavku.
Doporučení: Uložte hodnoty potřebné do poco a přidržte je.
Převod na HttpContext
Existují dva způsoby převodu na HttpContext HttpContext:
- Implicitní přetypování
- Použití konstruktoru
Doporučení: Ve většině případů by se mělo upřednostňovat implicitní přetypování, protože se uloží vytvořená instance do mezipaměti a zajistí se pouze jeden HttpContext požadavek.
CurrentCulture není ve výchozím nastavení nastavená.
V ASP.NET Framework CurrentCulture byla nastavena pro požadavek, ale to se neprovdá automaticky v ASP.NET Core. Místo toho musíte do kanálu přidat příslušný middleware.
Doporučení: Podrobnosti o povolení najdete v tématu ASP.NET Lokalizace jádra.
Nejjednodušší způsob, jak to povolit s podobným chováním, jako je ASP.NET Framework, by bylo přidat do kanálu následující:
app.UseRequestLocalization();
CurrentPrincipal
V ASP.NET Frameworku CurrentPrincipal a Current byla by nastavena na aktuálního uživatele. Na ASP.NET Core není k dispozici. Podpora je k dispozici u těchto adaptérů přidáním ISetThreadCurrentPrincipal
koncového bodu (dostupného pro kontrolery přes ).SetThreadCurrentPrincipalAttribute
Měl by se ale použít pouze v případě, že kód nelze refaktorovat k odebrání použití.
Doporučení: Pokud je to možné, použijte tuto vlastnost User nebo User ji předejte na web volání. Pokud to není možné, povolte nastavení aktuálního uživatele a zvažte také nastavení požadavku na logické jedno vlákno (podrobnosti najdete níže).
Vlákno požadavku v ASP.NET Core neexistuje.
V ASP.NET Framework by požadavek měl spřažení vláken a Current byl by k dispozici pouze v případě, že v daném vlákně. ASP.NET Core tuto záruku nemá, takže Current bude k dispozici ve stejném asynchronním kontextu, ale nebudou provedeny žádné záruky týkající se vláken.
Doporučení: Při čtení a zápisu do tohoto HttpContextčlánku je nutné zajistit, abyste to udělali jedním vláknem. Požadavek můžete vynutit, aby se nikdy nespustí souběžně v libovolném asynchronním kontextu nastavením ISingleThreadedRequestMetadata
. To bude mít vliv na výkon a mělo by se použít jenom v případě, že nemůžete refaktorovat využití, abyste zajistili nesouběhový přístup. K dispozici je implementace pro přidání kontrolerů s SingleThreadedRequestAttribute
:
[SingleThreadedRequest]
public class SomeController : Controller
{
...
}
Request možná bude potřeba předem nastavit
Ve výchozím nastavení není příchozí požadavek vždy vyhledatelný ani plně dostupný. Pokud chcete zobrazit chování v rozhraní .NET Framework, můžete se přihlásit k předběžnému načtení vstupního datového proudu. Tím se příchozí datový proud plně načte a uloží ho do vyrovnávací paměti nebo disku (v závislosti na nastavení).
Doporučení: Můžete to povolit použitím metadat koncového IPreBufferRequestStreamMetadata
bodu, která implementují rozhraní. To je k dispozici jako atribut PreBufferRequestStreamAttribute
, který lze použít pro kontrolery nebo metody.
Pokud to chcete povolit pro všechny koncové body MVC, existuje metoda rozšíření, která se dá použít následujícím způsobem:
app.MapDefaultControllerRoute()
.PreBufferRequestStream();
Response může vyžadovat ukládání do vyrovnávací paměti
Některá rozhraní API Response vyžadují uložení výstupního datového proudu do vyrovnávací paměti, například Output, End(), Clear()a SuppressContent.
Doporučení: Aby bylo možné podporovat chování, Response které vyžaduje uložení odpovědi do vyrovnávací paměti před odesláním, musí se koncové body přihlásit s implementací IBufferResponseStreamMetadata
metadat koncového bodu .
Pokud to chcete povolit pro všechny koncové body MVC, existuje metoda rozšíření, která se dá použít následujícím způsobem:
app.MapDefaultControllerRoute()
.BufferResponseStream();
Stav sdílené relace
Aby bylo možné podporovat Sessionkoncové body, musí se k němu přihlásit prostřednictvím implementace ISessionMetadata
metadat .
Doporučení: Pokud to chcete povolit pro všechny koncové body MVC, existuje metoda rozšíření, kterou můžete použít následujícím způsobem:
app.MapDefaultControllerRoute()
.RequireSystemWebAdapterSession();
To také vyžaduje určitou implementaci úložiště relací. Podrobnosti o možnostech najdete tady.
Vzdálená relace zveřejňuje další koncový bod pro aplikaci.
Podpora vzdálené relace zveřejňuje koncový bod, který umožňuje základní aplikaci načíst informace o relaci. To může způsobit, že mezi základní aplikací a aplikací architektury existuje potenciálně dlouhodobý požadavek, ale vyprší časový limit aktuálního požadavku nebo časového limitu relace (ve výchozím nastavení je 20 minut).
Doporučení: Ujistěte se, že použitý klíč rozhraní API je silný a že se připojení k aplikaci architektury provádí přes PROTOKOL SSL.
Virtuální adresáře musí být identické pro architektury a základní aplikace.
Nastavení virtuálního adresáře se používá pro generování tras, autorizaci a další služby v systému. V tomto okamžiku nebyla nalezena žádná spolehlivá metoda, která by umožňovala různé virtuální adresáře, protože ASP.NET Framework funguje.
Doporučení: Ujistěte se, že vaše dvě aplikace jsou na různých lokalitách (hostitelích nebo portech) se stejným rozložením aplikace nebo virtuálního adresáře.