ASP.NET Core MVC 'de denetleyicilerle istekleri işleme

, Steve Smith ve Scott Ade tarafından

denetleyiciler, eylemler ve eylem sonuçları, geliştiricilerin ASP.NET Core MVC kullanarak uygulama oluşturma konusunda temel bir parçasıdır.

Denetleyici nedir?

Bir denetleyici, bir dizi eylemi tanımlamak ve gruplandırmak için kullanılır. Bir eylem (veya eylem yöntemi), bir denetleyicide istekleri işleyen bir yöntemdir. Denetleyiciler benzer eylemleri birlikte mantıksal olarak gruplayın. Bu eylemlerin toplamı, yönlendirme, önbelleğe alma ve yetkilendirme gibi ortak kural kümelerinin toplu olarak uygulanmasını sağlar. İstekler, yönlendirmearacılığıyla eylemlerle eşleştirilir.

Kurala göre, denetleyici sınıfları:

  • Projenin kök düzeyi denetleyiciler klasöründe bulunur.
  • Öğesinden devralma Microsoft.AspNetCore.Mvc.Controller .

Denetleyici, aşağıdaki koşullardan en az birinin doğru olduğu bir instantiable sınıfıdır:

  • Sınıf adı ile sondüzeltildi Controller .
  • Sınıfı, adı sonekli olan bir sınıftan devralır Controller .
  • [Controller]Özniteliği sınıfına uygulanır.

Denetleyici sınıfı ilişkili bir özniteliğe sahip olmamalıdır [NonController] .

Denetleyiciler Açık bağımlılıklar ilkesiniizlemelidir. Bu ilkeyi uygulamak için birkaç yaklaşım vardır. Birden çok denetleyici eylemi aynı hizmeti gerektiriyorsa, bu bağımlılıkları istemek için Oluşturucu Ekleme kullanmayı düşünün. Hizmet yalnızca tek bir eylem yöntemiyle gerekliyse, bağımlılığı istemek için eylem ekleme işlemini kullanmayı düşünün.

M odel-V IEW-C ontroller düzeninde bir denetleyici, modelin istek ve örneklemesinin ilk işlemeden sorumludur. Genellikle, iş kararları model içinde gerçekleştirilmelidir.

Denetleyici, modelin işleme sonucunu alır (varsa) ve uygun görünümü ve ilgili görünüm verilerini ya da API çağrısının sonucunu döndürür. ASP.NET Core mvc 'ye genel bakış ve ASP.NET Core mvc ve Visual Studio ile çalışmaya başlamahakkında daha fazla bilgi edinin.

Denetleyici bir UI düzeyi soyutlamadır. Sorumlulukları, istek verilerinin geçerli olduğundan ve hangi görünümün (ya da bir API 'nin sonucunun) döndürüldüğünden emin sağlamaktır. İyi şekilde uyumlu olmayan uygulamalarda, doğrudan veri erişimi veya iş mantığı dahil değildir. Bunun yerine, denetleyici bu sorumlulukları işleyen hizmetlere temsilci seçer.

Eylemleri tanımlama

Bir denetleyicide özniteliği olanlar hariç genel yöntemler [NonAction] eylemlerdir. Eylemlerdeki Parametreler istek verilerine bağlıdır ve model bağlamakullanılarak onaylanır. Model-bağlantılı her şey için model doğrulaması oluşur. ModelState.IsValidÖzellik değeri, model bağlamanın ve doğrulamanın başarılı olup olmadığını gösterir.

Eylem yöntemleri bir sorunu iş açısından eşlemek için mantık içermelidir. İş kaygıları genellikle denetleyicinin bağımlılık eklemeyoluyla eriştiği hizmetler olarak temsil edilmelidir. Eylemler daha sonra iş eyleminin sonucunu bir uygulama durumuna eşler.

Eylemler her şeyi döndürebilir, ancak IActionResult Task<IActionResult> bir yanıt üreten (ya da zaman uyumsuz metotlar için) bir örneğini döndürür. Eylem yöntemi, ne tür bir yanıt seçmekten sorumludur. Eylem sonucu Yanıt verir.

Denetleyici Yardımcısı yöntemleri

Denetleyiciler genellikle denetleyicidendevralınır, ancak bu gerekli değildir. Öğesinden türetme Controller , üç yardımcı yöntem kategorisine erişim sağlar:

1. Yöntemler boş bir yanıt gövdesine yol açar

Content-TypeYanıt gövdesinde betimleyen içerik bulunmadığından http yanıt üst bilgisi dahil değildir.

Bu kategori içinde iki sonuç türü vardır: Redirect ve HTTP durum kodu.

  • HTTP durum kodu

    Bu tür bir HTTP durum kodu döndürür. Bu türün birkaç yardımcı yöntemi BadRequest ,, ve ' dir NotFound Ok . Örneğin, return BadRequest(); yürütüldüğünde 400 durum kodu üretir. , Ve gibi yöntemler BadRequest NotFound aşırı yüklendiğinde, Ok içerik anlaşması GERÇEKLEŞDIĞINDEN artık http durum kodu Yanıtlayıcıları olarak niteleyemez.

  • Yeniden yönlendirme

    Bu tür bir eyleme veya hedefe yeniden yönlendirme döndürür (,, Redirect , LocalRedirect RedirectToAction veya kullanarak RedirectToRoute ). Örneğin, return RedirectToAction("Complete", new {id = 123}); Complete bir anonim nesne geçirerek öğesine yönlendirir.

    Yeniden yönlendirme sonuç türü, birincil olarak Location http yanıt üst bilgisi ekleme IÇINDEKI http durum kodu türünden farklıdır.

2. Yöntemler, önceden tanımlanmış bir içerik türüyle boş olmayan bir yanıt gövdesine yol açar

Bu kategorideki çoğu yardımcı yöntem bir özelliği içerir, bu da yanıt ContentType Content-Type gövdesini tanımlamaya yönelik yanıt üst bilgisini ayarlamanıza olanak sağlar.

Bu kategori içinde iki sonuç türü vardır: görüntüleme ve biçimli yanıt.

  • Görünüm

    Bu tür, HTML işlemek için bir model kullanan bir görünüm döndürür. Örneğin, return View(customer); veri bağlama için bir modeli görünüme geçirir.

  • Biçimlendirilen yanıt

    Bu tür, bir nesneyi belirli bir şekilde göstermek için JSON veya benzer bir veri değişimi biçimi döndürür. Örneğin, return Json(customer); belirtilen NESNEYI JSON biçimine dizleştirir.

    Bu türün diğer yaygın yöntemleri ve içerir File PhysicalFile . Örneğin, return PhysicalFile(customerFilePath, "text/xml"); Physicalfileresultdöndürür.

3. Yöntemler, istemci ile anlaşan bir içerik türünde biçimlendirilen boş olmayan bir yanıt gövdesinin oluşmasına neden olur

Bu kategori, Içerik anlaşması olarak daha iyi bilinir. İçerik anlaşması , bir eylem bir ObjectResult türü ya da ıactionresult uygulaması dışında bir şey döndürdüğünde geçerlidir. Uygulama olmayan bir eylem IActionResult (örneğin, object ), aynı zamanda biçimli bir yanıt döndürür.

Bu türün bazı yardımcı yöntemleri,, BadRequest CreatedAtRoute ve içerir Ok . Bu yöntemlerin örnekleri return BadRequest(modelState); sırasıyla,, return CreatedAtRoute("routename", values, newobject); ve return Ok(value); , içerir. Bu BadRequest Ok , yalnızca bir değer geçirildiğinde içerik anlaşması gerçekleştirdiğine; bir değer geçirilmeksizin, bunun yerine http durum kodu sonuç türleri olarak işlev görür. CreatedAtRouteDiğer yandan yöntemi her zaman içerik anlaşması gerçekleştirir, çünkü aşırı yüklemelerinin hepsi bir değer geçirilmesini gerektirir.

Çapraz kesme konuları

Uygulamalar genellikle iş akışının parçalarını paylaşır. Örnek olarak, alışveriş sepetine erişmek için kimlik doğrulaması gerektiren bir uygulama veya bazı sayfalarda verileri önbelleğe alan bir uygulama verilebilir. Bir eylem yönteminden önce veya sonra mantık gerçekleştirmek için bir filtre kullanın. Çapraz kesme sorunları üzerinde filtrelerin kullanılması, yinelemeyi azaltabilir.

Gibi filtre özniteliklerinin çoğu, [Authorize] istenen ayrıntı düzeyi düzeyine bağlı olarak denetleyiciye veya eylem düzeyine uygulanabilir.

Hata işleme ve yanıt önbelleklemesi genellikle çapraz kesme kaygılardır:

Birçok çapraz kesme konusu, filtreler veya özel Ara yazılımkullanılarak işlenebilir.