ASP.NET Core MVC'de denetleyicileriyle istekleri işleme
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 isteğe göre etkinleştirilir ve atılır.
Kurala göre, denetleyici sınıfları:
- Projenin kök düzeyindeki Denetleyiciler klasöründe bulun.
- öğesinden
Microsoft.AspNetCore.Mvc.Controller
devralın.
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ı ile
Controller
son eklenmiştir. - sınıfı, adı ile
Controller
soneki olan 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 ekleme kullanmayı göz önünde bulundurun. Hizmete yalnızca tek bir eylem yöntemi gerekiyorsa, bağımlılığı istemek için Eylem Ekleme'yi kullanmayı göz önünde bulundurun.
M odel-V iew-C ontroller deseninde, bir denetleyici isteğin ilk işlenmesinden ve modelin örneklenmesindensorumludur. 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ı işleyen hizmetlere temsilci olarak görev verir.
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 örneğini IActionResult
(veya Task<IActionResult>
zaman uyumsuz yöntemler için) 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 Controllerdevralı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çı ,
NotFound
veOk
şeklindedirBadRequest
. Örneğin,return BadRequest();
yürütülürken 400 durum kodu üretir. ,NotFound
veOk
gibiBadRequest
yöntemler aşırı yüklendiğinde, içerik anlaşması gerçekleştiğinden artık HTTP Durum Kodu yanıtlayıcıları olarak nitelenmez.Yönlendirme
Bu tür, bir eyleme veya hedefe (, ,
LocalRedirect
RedirectToAction
veyaRedirectToRoute
kullanarakRedirect
) yeniden yönlendirme döndürür. Örneğin,return RedirectToAction("Complete", new {id = 123});
anonim bir nesne geçirerek öğesineComplete
yönlendirir.Yeniden yönlendirme sonuç türü, öncelikle BIR
Location
HTTP yanıt üst bilgisi ekinde 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 Content-Type
olanak sağlayan bir ContentType
ö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 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
File
vePhysicalFile
bulunur. Ö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 anlaşması, bir eylem bir tür veya uygulama dışında IActionResult bir ObjectResult şey döndürdüğünde uygulanır. Uygulama dışıIActionResult
bir eylem (örneğin, ) döndüren bir eylem, object
Biçimlendirilmiş Yanıt da döndürür.
Bu tür bazı yardımcı yöntemler arasında BadRequest
, CreatedAtRoute
ve Ok
bulunur. Bu yöntemlere return BadRequest(modelState);
örnek olarak sırasıyla , return CreatedAtRoute("routename", values, newobject);
ve return Ok(value);
verilebilir. İçerik anlaşması gerçekleştirip yalnızca bir değer geçirildiğinde gerçekleştirildiğini BadRequest
Ok
unutmayın; bir değer geçirilmeden, bunun yerine HTTP Durum Kodu sonuç türleri olarak görev yapar. CreatedAtRoute
Öte yandan yöntemi her zaman içerik anlaşması gerçekleştirir çünkü aşırı yüklemelerinin tümü bir değerin geçirilmesini gerektirir.
Çapraz Kesme Endişeleri
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 kesme konusunda 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 çapraz kesme endişeleridir:
Birçok çapraz kesme sorunu filtreler veya özel ara yazılım kullanılarak işlenebilir.
ASP.NET Core