Aracılığıyla paylaş


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.Controllerdevralı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 Controllerson eklenmiştir.
  • sınıfı, adı ile Controllersoneki 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çı , NotFoundve OkşeklindedirBadRequest. Örneğin, return BadRequest(); yürütülürken 400 durum kodu üretir. , NotFoundve Ok gibi BadRequestyö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 (, , LocalRedirectRedirectToActionveya RedirectToRoutekullanarakRedirect) yeniden yönlendirme döndürür. Örneğin, return RedirectToAction("Complete", new {id = 123}); anonim bir nesne geçirerek öğesine Completeyö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 ve PhysicalFilebulunur. Ö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, objectBiçimlendirilmiş Yanıt da 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. İç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.