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í IBufferResponseStreamMetadatametadat 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 ISessionMetadatametadat .

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.