Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tarafından Steve Smith ve Scott Addie
Denetleyiciler, eylemler ve eylem sonuçları, geliştiricilerin ASP.NET Core MVC kullanarak uygulama derlemesinin temel bir parçasıdır.
Denetleyici nedir?
Denetleyici, bir eylem kümesini tanımlamak ve gruplandırmak için kullanılır. Eylem (veya eylem yöntemi), bir denetleyicide istekleri işleyen bir yöntemdir. Denetleyiciler, benzer eylemleri mantıksal olarak birlikte gruplandırıyor. Eylemlerin bu toplaması yönlendirme, önbelleğe alma ve yetkilendirme gibi ortak kural kümelerinin toplu olarak uygulanmasını sağlar. İstekler yönlendirme yoluyla eylemlere eşlenir. Denetleyiciler her istekte etkinleştirilir ve devredışı bırakılır.
Kurala göre, denetleyici sınıfları:
- Projenin kök düzeyindeki Denetleyiciler klasöründe bulun.
-
Microsoft.AspNetCore.Mvc.Controller'den devral.
Denetleyici, aşağıdaki koşullardan en az birinin doğru olduğu, genellikle genel olarak örneklenebilir bir sınıftır:
- Sınıf adının sonuna
Controllereki getirilmiştir. - Sınıf, adı
Controllerile biten bir sınıftan devralır. -
[Controller]özniteliği sınıfına uygulanır.
Denetleyici sınıfının ilişkili [NonController] özniteliği olmamalıdır.
Denetleyiciler Açık Bağımlılıklar İlkesi'ni izlemelidir. Bu ilkeyi uygulamaya yönelik birkaç yaklaşım vardır. Birden çok denetleyici eylemi aynı hizmeti gerektiriyorsa, bu bağımlılıkları istemek için oluşturucu enjeksiyonu kullanmayı göz önünde bulundurun. Hizmet yalnızca bir eylem yöntemince ihtiyaç duyuluyorsa, bağımlılığı talep etmek için Action Injection kullanmayı göz önünde bulundurun.
Model-View-Controller deseninde, bir denetleyici, isteğin ilk işlenmesinden ve modelin örneklenmesinden sorumludur. Genel olarak, iş kararları model içinde yapılmalıdır.
Denetleyici, modelin işlemesinin (varsa) sonucunu alır ve uygun görünümü ve ilişkili görünüm verilerini veya API çağrısının sonucunu döndürür. daha fazla bilgi için bkz . ASP.NET Core MVC'ye Genel Bakış ve ASP.NET Core MVC ve Visual Studio'yu kullanmaya başlama.
Denetleyici, kullanıcı arabirimi düzeyinde bir soyutlamadır. Sorumlulukları, istek verilerinin geçerli olduğundan emin olmak ve api için hangi görünümün (veya sonucun) döndürüleceğini seçmektir. İyi faktörlü uygulamalarda veri erişimini veya iş mantığını doğrudan içermez. Bunun yerine denetleyici, bu sorumlulukları üstlenen hizmetlere devreder.
Eylemleri Tanımlama
Bir denetleyicideki ortak yöntemler, özniteliğine [NonAction] sahip olanlar dışında eylemlerdir. Eylemlerdeki parametreler istek verilerine bağlıdır ve model bağlama kullanılarak doğrulanır. Model doğrulaması, modele bağlı olan her şey için gerçekleşir.
ModelState.IsValid Özellik değeri, model bağlama ve doğrulamanın başarılı olup olmadığını gösterir.
Eylem yöntemleri, bir isteği bir iş sorununa eşlemek için mantık içermelidir. İş kaygıları genellikle denetleyicinin bağımlılık ekleme yoluyla eriştiği hizmetler olarak temsil edilmelidir. Eylemler daha sonra iş eyleminin sonucunu bir uygulama durumuyla eşler.
Eylemler her şeyi döndürebilir, ancak genellikle yanıt üreten bir IActionResult örneğini (veya asenkron yöntemler için Task<IActionResult>) 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 öğesinden Controller devralır, ancak bu gerekli değildir. 'den Controller türetme, üç yardımcı yöntem kategorisine erişim sağlar:
1. Boş yanıt gövdesine neden olan yöntemler
Content-Type Yanıt gövdesinde anlatacak içerik olmadığından HTTP yanıt üst bilgisi eklenmez.
Bu kategoride iki sonuç türü vardır: Yeniden yönlendirme ve HTTP Durum Kodu.
HTTP Durum Kodu
Bu tür bir HTTP durum kodu döndürür. Bu tür yardımcı yöntemlerden birkaçı ,
BadRequestveNotFoundşeklindedirOk. Örneğin,return BadRequest();yürütülürken 400 durum kodu üretir.BadRequest,NotFoundveOkgibi yöntemler aşırı yüklendiğinde, içerik müzakeresi gerçekleştiğinden, artık HTTP Durum Kodu yanıtlayıcıları olarak nitelenmez.Yönlendirme
Bu tür,
Redirect,LocalRedirect,RedirectToActionveyaRedirectToRoutekullanarak bir eyleme veya hedefe yönlendirme döndürür. Örneğin, anonim bir nesne geçirerekreturn RedirectToAction("Complete", new {id = 123});,Complete'e yönlendirir.Yeniden yönlendirme sonuç türü, öncelikle bir
LocationHTTP yanıt üst bilgisinin eklenmesiyle HTTP Durum Kodu türünden farklıdır.
2. Önceden tanımlanmış içerik türüne sahip boş olmayan bir yanıt gövdesine neden olan yöntemler
Bu kategorideki yardımcı yöntemlerin çoğu, yanıt gövdesini açıklamak için yanıt üst bilgisini ayarlamanıza ContentType olanak sağlayan bir Content-Type özellik içerir.
Bu kategoride iki sonuç türü vardır: Görünüm ve Biçimlendirilmiş 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);bir modeli veri bağlama için görünüme geçirir.Biçimlendirilmiş Yanıt
Bu tür, bir nesneyi belirli bir şekilde temsil etmek için JSON veya benzer bir veri değişimi biçimi döndürür. Örneğin,
return Json(customer);sağlanan nesneyi JSON biçiminde serileştirir.Bu türün diğer yaygın yöntemleri arasında
FilevePhysicalFilebulunur. Örneğin,return PhysicalFile(customerFilePath, "text/xml");döndürür PhysicalFileResult.
3. İstemciyle üzerinde anlaşmaya varılan bir içerik türünde biçimlendirilmiş boş olmayan yanıt gövdesiyle sonuçlanan yöntemler
Bu kategori İçerik Anlaşması olarak daha iyi bilinir.
İçerik uzlaşması, bir eylem bir tür veya IActionResult uygulamasından farklı bir şey döndürdüğünde uygulanır. "IActionResult uygulaması olmayan bir eylem (örneğin, object) aynı zamanda Biçimlendirilmiş Yanıt döndürür."
Bu tür bazı yardımcı yöntemler arasında BadRequest, CreatedAtRouteve Okbulunur. Bu yöntemlere return BadRequest(modelState);örnek olarak sırasıyla , return CreatedAtRoute("routename", values, newobject);ve return Ok(value);verilebilir. Dikkat edin, BadRequest ve Ok yalnızca bir değer geçirildiğinde içerik anlaşması gerçekleştirir; bir değer geçirilmediğinde, HTTP Durum Kodu sonuç türleri olarak hizmet eder. Öte yandan, CreatedAtRoute yöntemi her zaman içerik müzakeresi gerçekleştirir çünkü aşırı yüklemelerinin tümü bir değerin geçmesini gerektirir.
Çapraz İşlevli Konular
Uygulamalar genellikle iş akışlarının bölümlerini 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. Eylem yöntemi öncesinde veya sonrasında mantık gerçekleştirmek için filtre kullanın. Çapraz kesen endişelerde Filtreler kullanmak yinelemeyi azaltabilir.
gibi [Authorize]çoğu filtre özniteliği, istenen ayrıntı düzeyine bağlı olarak denetleyici veya eylem düzeyinde uygulanabilir.
Hata işleme ve yanıt önbelleğe alma genellikle katmanlar arası kaygılar arasındadır.
Birçok çapraz kesme sorunu filtreler veya özel ara yazılım kullanılarak işlenebilir.
ASP.NET Core