asp.net çekirdek ara yazılımı ve filtreler


Yanıtlar:


83

Kanal 9'da bununla ilgili bir video var: ASP.NET Monsters # 91: Middleware vs. Filters . Videoyu özetlemek için:

Talebin yerine getirilmesi başlar ve bir ara yazılımımız ve başka bir ara yazılımımız var, bunu "oyuncak bebeklerin içindeki Rus bebekleri" gibi düşünün ve sonunda yönlendirme ara yazılımı devreye girer ve ardından talep MVC hattına girer. görüntü açıklamasını buraya girin Dolayısıyla, MVC bağlamına ihtiyaç duymuyorsanız (diyelim ki akış ve yürütme konusunda endişeleriniz var, başlıklara bazı ön yönlendirme mekanizmalarına yanıt vermek gibi), o zaman ara yazılımları kullanın .
Ancak, MVC bağlamına ihtiyaç duyuyorsanız ve eylemlere karşı çalışmak istiyorsanız, filtreleri kullanın .


Yani, eğer mantığım varsa, sadece bir kısmı MVC ile ilgili olan her istek (örneğin Loglama) üzerinde çalıştırmak istiyorum, bunu ara katman yazılımına koyarım, sonra filtre işleyicisinin bunun için gerekli olan belirli mantığı yapmasını isterim, o zaman ara katman yazılımına yeniden atılsın mı?
Terry H

69

Middleware, ASP.NET Core seviyesinde çalışır ve uygulamaya gelen her bir istek üzerine hareket edebilir.

MVC filtreleri ise yalnızca MVC'ye gelen istekler için çalışır.

Örneğin, tüm isteklerin HTTPS üzerinden yapılması gerektiğini zorunlu kılmak isteseydim, bunun için bir ara yazılım kullanmam gerekirdi. Bunu yapan bir MVC filtresi yaptıysam, kullanıcılar yine de örneğin HTTP üzerinden statik dosyalar isteyebilir.

Ancak diğer yandan MVC denetleyicilerinde istek sürelerini kaydeden bir şey kesinlikle bir eylem filtresi olabilir.


5

middlewareMVC bağlamı ardışık düzen içinde kullanılabilir hale gelmeden önce yürütülür . Yani, örneğin bir ActionFilter durumunda veya öğesine middlewareerişimi yoktur . Erişiminiz olan şey , istek ve yanıta ilişkin eylemler gerçekleştirmenize olanak tanıyan erişimidir. Model bağlama henüz gerçekleşmediğinden, ara yazılım kullanmak, bir doğrulama işlevini çalıştırmak veya değerleri değiştirmek için uygun olmayacaktır. hangi denetleyici veya eylemin çağrıldığına bakılmaksızın her talepte de çalışacaktır.ActionExecutingContextActionExecutedContextHttpContextMiddleware

Öte yandan, filtersbaşlangıçta genel olarak filtreyi kaydetmediğiniz sürece yalnızca belirli eylemler ve denetleyiciler üzerinde çalışır. İçeriğe tam erişiminiz olduğundan, denetleyiciye ve eylemin kendisine de erişebilirsiniz.

Kaynak ve örnek: dotnetcultist.com

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.