Aracılığıyla paylaş


Kullanım Kılavuzu

Microsoft.AspNetCore.SystemWebAdapters ASP.NET Core'da ASP.NET çerçeveden davranışı taklit etmek için bir öykünme katmanı sağlar. Bunları kullanırken dikkat edilmesi gereken bazı noktalara ilişkin bazı yönergeler aşağıdadır:

HttpContext Ömür boyu

Bağdaştırıcılar, bir isteğin ömrü boyunca kullanılamayan tarafından desteklenir HttpContext . Bu nedenle, HttpContext ASP.NET Core üzerinde çalıştırıldığında bir isteğin ardından da kullanılamazken, ASP.NET Framework'te bazen çalışır. bir ObjectDisposedException istek sonundan sonra kullanıldığı durumlarda oluşturulur.

Öneri: Gereken değerleri bir POCO'da depolayın ve bunu tutun.

Dönüştürme HttpContext

bir'i değerine dönüştürmenin HttpContextHttpContextiki yolu vardır:

  • Örtük döküm
  • Oluşturucu kullanımı

Öneri: Çoğu durumda, oluşturulan örneği önbelleğe alacak ve istek başına yalnızca bir tane HttpContext olduğundan örtük atama tercih edilmelidir.

CurrentCulture varsayılan olarak ayarlanmadı

ASP.NET Framework'te CurrentCulture bir istek için ayarlandı, ancak bu işlem ASP.NET Core'da otomatik olarak yapılmaz. Bunun yerine, işlem hattınıza uygun ara yazılımı eklemeniz gerekir.

Öneri: Bunun nasıl etkinleştirileceği hakkında ayrıntılı bilgi için bkz . ASP.NET Çekirdek Yerelleştirme .

Bunu ASP.NET Framework ile benzer davranışlarla etkinleştirmenin en kolay yolu, işlem hattınıza aşağıdakileri eklemektir:

app.UseRequestLocalization();

CurrentPrincipal

ASP.NET Framework'te CurrentPrincipalCurrent geçerli kullanıcıya ayarlanır. Bu, ASP.NET Core'da kullanıma sunulmaz. Bunun için destek, uç noktaya ekleyerek ISetThreadCurrentPrincipal (aracılığıyla denetleyiciler tarafından kullanılabilir) bu bağdaştırıcılarla SetThreadCurrentPrincipalAttributekullanılabilir. Ancak, yalnızca kodun kullanımı kaldırmak için yeniden düzenlenememesi durumunda kullanılmalıdır.

Öneri: Mümkünse özelliğini User kullanın veya User bunun yerine arama sitesine geçirin. Mümkün değilse, geçerli kullanıcıyı ayarlamayı etkinleştirin ve ayrıca isteği mantıksal tek iş parçacığı olarak ayarlamayı göz önünde bulundurun (ayrıntılar için aşağıya bakın).

İstek iş parçacığı ASP.NET Core'da yok

ASP.NET Framework'te bir isteğin iş parçacığı benzitesi vardı ve Current yalnızca bu iş parçacığında kullanılabilirdi. ASP.NET Core bu garantiye sahip değildir, bu nedenle Current aynı zaman uyumsuz bağlam içinde kullanılabilir ancak iş parçacıklarıyla ilgili hiçbir garanti sunulmaz.

Öneri: öğesini okuyor/yazıyorsanız HttpContext, bunu tek iş parçacıklı bir şekilde yaptığınızdan emin olmanız gerekir. ayarını yaparak ISingleThreadedRequestMetadatabir isteği hiçbir zaman uyumsuz bağlamda eşzamanlı olarak çalışmamaya zorlayabilirsiniz. Bu, performansı etkiler ve yalnızca eşzamanlı olmayan erişim sağlamak için kullanımı yeniden düzenleyemiyorsanız kullanılmalıdır. ile SingleThreadedRequestAttributedenetleyicilere eklemek için kullanılabilecek bir uygulama vardır:

[SingleThreadedRequest]
public class SomeController : Controller
{
    ...
} 

Request ön yükleme yapılması gerekebilir

Varsayılan olarak, gelen istek her zaman aranabilir veya tam olarak kullanılabilir değildir. .NET Framework'te görülen davranışı elde etmek için giriş akışını önceden etkinleştirmeyi tercih edebilirsiniz. Bu, gelen akışı tamamen okur ve belleğe veya diske arabelleğe alır (ayarlara bağlı olarak).

Öneri: Arabirimi uygulayan IPreBufferRequestStreamMetadata uç nokta meta verileri uygulanarak bu etkinleştirilebilir. Bu, denetleyicilere veya yöntemlere uygulanabilen bir öznitelik PreBufferRequestStreamAttribute olarak kullanılabilir.

Bunu tüm MVC uç noktalarında etkinleştirmek için aşağıdaki gibi kullanılabilecek bir uzantı yöntemi vardır:

app.MapDefaultControllerRoute()
    .PreBufferRequestStream();

Response arabelleğe almayı gerektirebilir

üzerindeki Response bazı API'ler, çıkış akışının arabelleğe alınıp alınmaması gerekir. ÖrneğinOutput, , End()Clear(), ve SuppressContent.

Öneri: Göndermeden önce yanıtı arabelleğe almayı gerektiren davranışı desteklemek için Response uç noktaların bunu uygulayan IBufferResponseStreamMetadatauç nokta meta verileriyle kabul etmesi gerekir.

Bunu tüm MVC uç noktalarında etkinleştirmek için aşağıdaki gibi kullanılabilecek bir uzantı yöntemi vardır:

app.MapDefaultControllerRoute()
    .BufferResponseStream();

Paylaşılan oturum durumu

'yi desteklemek Sessioniçin uç noktaların bunu uygulayan ISessionMetadatameta veriler aracılığıyla kabul etmesi gerekir.

Öneri: Bunu tüm MVC uç noktalarında etkinleştirmek için aşağıdaki gibi kullanılabilecek bir uzantı yöntemi vardır:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

Bu, oturum deposunun bazı uygulamalarını da gerektirir. Buradaki seçeneklerin ayrıntıları için buraya bakın.

Uzak oturum, uygulama için ek uç noktayı kullanıma sunar

Uzak oturum desteği , çekirdek uygulamanın oturum bilgilerini almasını sağlayan bir uç noktayı kullanıma sunar. Bu durum, çekirdek uygulama ile çerçeve uygulaması arasında uzun süreli bir istek bulunmasına neden olabilir, ancak geçerli istek veya oturum zaman aşımıyla zaman aşımına uyacaktır (varsayılan olarak 20 dakikadır).

Öneri: Kullanılan API anahtarının güçlü olduğundan ve çerçeve uygulamasıyla bağlantının SSL üzerinden yapıldığından emin olun.

Çerçeve ve çekirdek uygulamalar için sanal dizinlerin aynı olması gerekir

Sanal dizin kurulumu, sistem içindeki yol oluşturma, yetkilendirme ve diğer hizmetler için kullanılır. Bu noktada, ASP.NET Framework'ün çalışma şekli nedeniyle farklı sanal dizinleri etkinleştirmek için güvenilir bir yöntem bulunamadı.

Yeniden kullanma: İki uygulamanızın aynı uygulama/sanal dizin düzenine sahip farklı sitelerde (konaklar ve/veya bağlantı noktaları) olduğundan emin olun.