ASP.NET Core MVC’ye Genel Bakış

Steve Smith tarafından

ASP.NET Core MVC, Model-View-Controller tasarım desenini kullanarak web uygulamaları ve API'ler için zengin bir çerçevedir.

MVC düzeni

Model-View-Controller (MVC) mimari deseni, bir uygulamayı üç ana bileşen grubu olarak ayırmaktadır: Modeller, Görünümler ve Denetleyiciler. Bu düzen, endişelerin ayrımsını elde etmek için yardımcı olur. Bu düzen kullanılarak kullanıcı istekleri, kullanıcı eylemlerini gerçekleştirmek ve/veya sorguların sonuçlarını almak için Modelle çalışmakla sorumlu olan denetleyiciye yönlendirildi. Denetleyici, kullanıcıya görüntülemek için Görünüm'leri seçer ve gereken tüm Model verilerini sağlar.

Aşağıdaki diyagramda üç ana bileşen ve diğer bileşenlere başvurulan bileşenler aşağıda vemektedir:

MVC Düzeni

Tek işi olan bir şeyi (model, görünüm veya denetleyici) kodlama, hata ayıklama ve test etmek daha kolay olduğundan, bu sorumlulukların bu açıklaması uygulamayı karmaşıklık açısından ölçeklendirmeye yardımcı olur. Bu üç alandan iki veya daha fazlasına yayılan bağımlılıkları olan kodu güncelleştirmek, test etmek ve hata ayıklamak daha zordur. Örneğin, kullanıcı arabirimi mantığı iş mantığından daha sık değişiklik gösterir. Sunu kodu ve iş mantığı tek bir nesnede birleştirilmişse, kullanıcı arabirimi her değiştirildiğinde iş mantığı içeren bir nesne değiştirilmelidir. Bu genellikle hatalara neden olur ve her minimal kullanıcı arabirimi değişikliğinin ardından iş mantığının yeniden test güncelleştirmesi gerekir.

Not

Hem görünüm hem de denetleyici modele bağlıdır. Ancak model ne görünüme ne de denetleyiciye bağlıdır. Bu, ayrılığın temel avantajlarından biri. Bu ayrım, modelin görsel sunumdan bağımsız olarak oluşturmasını ve test sınanmasını sağlar.

Model Sorumlulukları

Bir MVC uygulamasındaki Model, uygulamanın durumunu ve uygulama tarafından gerçekleştirecek olan tüm iş mantığını veya işlemleri temsil eder. İş mantığı, uygulamanın durumunu kalıcı olarak kalıcı yapmak için herhangi bir uygulama mantığıyla birlikte modelde kapsüllemeli. Kesin türe sahip görünümler genellikle bu görünümde görüntülenmek üzere verileri içeren görünümler için tasarlanmış ViewModel türlerini kullanır. Denetleyici, modelden bu ViewModel örneklerini oluşturur ve bunları oluşturur.

Sorumlulukları Görüntüle

Görünümler, kullanıcı arabirimi aracılığıyla içerik sunmakla sorumludur. Html işaretlemeye .NET kodu eklemek için görünüm altyapısını kullanırlar. Razor Görünümler içinde çok az mantık olması ve içindeki tüm mantıkların içerik sunmakla ilgili olması gerekir. Karmaşık bir modelden verileri görüntülemek için görünüm dosyalarında çok fazla mantık gerçekleştirmeniz gerekirse görünümü basitleştirmek için Görünüm Bileşeni,ViewModel veya görünüm şablonu kullanmayı göz önünde bulundurabilirsiniz.

Denetleyici Sorumlulukları

Denetleyiciler, kullanıcı etkileşimini ele alan, modelle birlikte çalışan ve sonuçta işlemek için bir görünüm seçen bileşenlerdir. Bir MVC uygulamasında, görünüm yalnızca bilgileri görüntüler; denetleyici, kullanıcı girişini ve etkileşimini işler ve yanıt verir. MVC düzeninde, denetleyici ilk giriş noktasıdır ve hangi model türleriyle çalışılacak ve hangi görünümün işlen bir görünümle (bu nedenle adı - uygulamanın belirli bir i ittele nasıl yanıt verdiği kontrol eder) seçmekten sorumludur.

Not

Denetleyiciler çok fazla sorumlulukla aşırı karmaşık olmaması gerekir. Denetleyici mantığının aşırı karmaşık hale geliyor olması için, iş mantığını denetleyiciden ve etki alanı modeline itin.

İpucu

Denetleyici eylemlerinizin sık sık aynı tür eylemleri gerçekleştireceklerini bulursanız, bu ortak eylemleri filtrelere alın.

ASP.NET Core MVC

MVC ASP.NET Core, basit, açık kaynak ve son derece test edilebilir bir sunu çerçevesidir ve bu çerçeve, ASP.NET Core.

ASP.NET Core MVC, sorunları temiz bir şekilde ayırmaya olanak sağlayan dinamik web siteleri oluşturmak için desen tabanlı bir yol sağlar. İşaretleme üzerinde tam denetim sağlar, TDD kullanımı kolay geliştirmeyi destekler ve en son web standartlarını kullanır.

Yönlendirme

ASP.NET Core MVC, ASP.NET Core ve aranabilir URL'lere sahip uygulamalar derlemenizi sağlayan güçlü bir URL eşleme bileşeni olan ASP.NET Core'ninyönlendirmesi üzerine tasarlanmıştır. Bu, web sunucunuzda dosyaların nasıl düzenleniyor olduğu konusundan bağımsız olarak, arama motoru iyileştirmesi (SEO) ve bağlantı oluşturma için iyi bir şekilde çalışacak şekilde, uygulamanın URL adlandırma desenlerini tanımlamanızı sağlar. Yol değeri kısıtlamalarını, varsayılanları ve isteğe bağlı değerleri destekleyen kullanışlı bir yol şablonu söz dizimi kullanarak yollarınızı tanımlayabilirsiniz.

Kural tabanlı yönlendirme, uygulamanıza kabul edilen URL biçimlerini genel olarak tanımlamanızı ve bu biçimlerin her birini belirli bir denetleyicide belirli bir eylem yöntemiyle eşlemenizi sağlar. Gelen bir istek geldiğinde yönlendirme altyapısı URL'yi ayrıştırarak tanımlı URL biçimlerinden biri ile eşler ve ilişkili denetleyicinin eylem yöntemini arar.

routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");

Öznitelik yönlendirme, denetleyicilerinizi ve eylemlerinizi uygulama yollarını tanımlayan özniteliklerle dekore etmek için yönlendirme bilgilerini belirtmenize olanak sağlar. Bu, yol tanımlarının denetleyicinin ve bunların ilişkili olduğu eylemin yanına yerleştiril olduğu anlamına gelir.

[Route("api/[controller]")]
public class ProductsController : Controller
{
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
      ...
    }
}

Model bağlama

ASP.NET Core MVC model bağlaması, istemci istek verilerini (form değerleri, yol verileri, sorgu dizesi parametreleri, HTTP üst bilgileri) denetleyicinin işleyene nesnelere dönüştürür. Sonuç olarak, denetleyici mantığınız gelen istek verilerini bulmak için çalışmak zorunda değildir; yalnızca eylem yöntemlerine parametre olarak veri içerir.

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ... }

Model doğrulaması

ASP.NET Core MVC, model nesnenizi veri açıklaması doğrulama öznitelikleriyle dekore etmekle doğrulamayı destekler. Doğrulama öznitelikleri, değerler sunucuya ve denetleyici eylemi çağrılmadan önce sunucuya gönderildiklerden önce istemci tarafında denetlenir.

using System.ComponentModel.DataAnnotations;
public class LoginViewModel
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

Denetleyici eylemi:

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    if (ModelState.IsValid)
    {
      // work with the model
    }
    // At this point, something failed, redisplay form
    return View(model);
}

Çerçeve, hem istemcide hem de sunucuda istek verilerini doğrulamayı ele almaktadır. Model türlerinde belirtilen doğrulama mantığı, işlenen görünümlere göze almayıcı ek açıklamalar olarak eklenir ve jQuery Doğrulaması ile tarayıcıda uygulanır.

Bağımlılık ekleme

ASP.NET Core ekleme (DI) için yerleşik desteğine sahip. MVC ASP.NET Core, denetleyiciler oluşturucuları aracılığıyla gerekli hizmetleri talep etmelerini sağlayarak Açık Bağımlılıklar İlkesi'ne uymalarına olanak sağlar.

Ayrıca, uygulamanıza görünüm dosyalarında bağımlılık ekleme özelliği kullanılarakyönergesi de @inject kullanılabilir:

@inject SomeService ServiceName

<!DOCTYPE html>
<html lang="en">
<head>
    <title>@ServiceName.GetTitle</title>
</head>
<body>
    <h1>@ServiceName.GetTitle</h1>
</body>
</html>

Filtreler

Filtreler, geliştiricilerin özel durum işleme veya yetkilendirme gibi çapraz kesme endişelerini kapsüllemesine yardımcı olur. Filtreler, eylem yöntemleri için özel ön ve son işleme mantığı çalıştırmaya olanak sağlar ve belirli bir istek için yürütme işlem hattı içindeki belirli noktalarda çalıştıracak şekilde yalıtabilirsiniz. Filtreler denetleyicilere veya eylemlere öznitelik olarak uygulanabilir (veya genel olarak çalıştırabilirsiniz). Çerçeveye çeşitli filtreler Authorize (örneğin) dahil edilir. [Authorize] , MVC yetkilendirme filtreleri oluşturmak için kullanılan özniteliğidir.

[Authorize]
public class AccountController : Controller

Alanlar

Alanlar, büyük bir MVC Web uygulamasını ASP.NET Core daha küçük işlevsel gruplamalara bölmek için bir yol sağlar. Alan, uygulamanın içindeki bir MVC yapısıdır. Bir MVC projesinde Model, Denetleyici ve Görünüm gibi mantıksal bileşenler farklı klasörlerde tutulur ve MVC bu bileşenler arasında ilişki oluşturmak için adlandırma kuralları kullanır. Büyük bir uygulama için, uygulamayı ayrı üst düzey işlevsellik alanlarına bölmek avantajlı olabilir. Örneğin, satın alma, faturalama ve arama gibi birden çok iş birimine sahip bir e-ticaret uygulaması. Bu birimlerin her biri kendi mantıksal bileşen görünümlerine, denetleyicilerine ve modellerine sahiptir.

Web API'leri

MVC, web sitesi inşa etmek için harika bir platform olmanın ASP.NET Core Web API'leri için büyük destek sunar. Tarayıcılar ve mobil cihazlar dahil olmak üzere çok çeşitli istemcilere erişen hizmetler derlemek için kullanabilirsiniz.

Çerçeve, verileri JSON veya XML olarak biçimlendirmek için yerleşik destekle HTTP içerik anlaşması desteği içerir. Kendi biçimlerinize destek eklemek için özel biçimlendirenler yazın.

Hiper medya desteğini etkinleştirmek için bağlantı oluşturma kullanın. Web API'lerinizi birden çok Web uygulaması arasında paylaştırmanızı sağlamak için çıkış noktası arası kaynak paylaşımı (CORS) desteğini kolayca etkinleştirin.

Test Sınanma

Çerçevenin arabirimler ve bağımlılık ekleme kullanımı, birim testi için uygun hale geldi ve çerçevede tümleştirme testlerini hızlı ve kolay hale Entity Framework için TestHost ve InMemory sağlayıcısı gibi) özellikleri de içerir. Denetleyici mantığını test etmek hakkında daha fazla bilgi.

Razor altyapıyı görüntüleme

ASP.NET Core MVC görünümlerini işlemek Razor için görünüm altyapısını kullanın. Razor , ekli C# kodu kullanarak görünümleri tanımlamak için kullanılan küçük, ifadeli ve akıcı bir şablon biçimlendirme dilidir. Razor , sunucuda dinamik olarak web içeriği oluşturmak için kullanılır. Sunucu kodunu istemci tarafı içerik ve kodla temiz bir şekilde karıştırabilirsiniz.

<ul>
    @for (int i = 0; i < 5; i++) {
        <li>List item @i</li>
    }
</ul>

Görünüm Razor altyapısını kullanarak düzenleri, kısmi görünümleri ve değiştirilebilir bölümleri tanımlayabilirsiniz.

Kesin olarak türü kesin olarak yazıldı görünümler

Razor MVC'de görünümler modelinize göre kesin olarak yazabilirsiniz. Denetleyiciler görünümlere kesin olarak türü kesin olarak yazarak görünümlerinizi tür denetimi ve IntelliSense desteğine sahip olacak şekilde iletir.

Örneğin, aşağıdaki görünüm türünde bir model IEnumerable<Product> işler:

@model IEnumerable<Product>
<ul>
    @foreach (Product p in Model)
    {
        <li>@p.Name</li>
    }
</ul>

Etiket Yardımcıları

Etiket Yardımcıları, sunucu tarafı kodunun dosyalarda HTML öğeleri oluşturma ve işlemeye katılmalarını Razor sağlar. Etiket yardımcılarını kullanarak özel etiketler tanımlayabilir (örneğin, ) veya mevcut etiketlerin davranışını <environment> değiştirebilirsiniz (örneğin, <label> ). Etiket Yardımcıları, öğe adına ve özniteliklerine göre belirli öğelere bağlanıyor. Bir yandan HTML düzenleme deneyimini korurken diğer yandan sunucu tarafı işlemenin avantajlarını sağlar.

Form oluşturma, bağlantı oluşturma, varlıkları yükleme ve daha fazlası gibi ortak görevler için birçok yerleşik Etiket Yardımcısı vardır ve genel depolama depolarında ve diğer paketlerde GitHub daha NuGet vardır. Etiket Yardımcıları C# ile yazar ve öğe adına, öznitelik adına veya üst etikete göre HTML öğelerini hedefler. Örneğin, yerleşik LinkTagHelper eyleminin bağlantısını oluşturmak Login için AccountsController kullanılabilir:

<p>
    Thank you for confirming your email.
    Please <a asp-controller="Account" asp-action="Login">Click here to Log in</a>.
</p>

, Geliştirme, Hazırlama veya Üretim gibi çalışma zamanı ortamına bağlı olarak görünümlerinize farklı betikler (ham veya minimum) eklemek EnvironmentTagHelper için kullanılabilir:

<environment names="Development">
    <script src="~/lib/jquery/dist/jquery.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
            asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
            asp-fallback-test="window.jQuery">
    </script>
</environment>

Etiket Yardımcıları, HTML ve işaretleme oluşturmak için HTML dostu bir geliştirme deneyimi ve zengin bir IntelliSense ortamı Razor sağlar. Yerleşik Etiket Yardımcılarının çoğu mevcut HTML öğelerini hedefler ve öğe için sunucu tarafı öznitelikler sağlar.

Bileşenleri Görüntüle

Bileşenleri Görüntüle, işleme mantığını pakete alıp uygulamanın her yerinde yeniden kullanmanıza olanak sağlar. Bunlar kısmi görünümlere benzer,ancak ilişkili mantığa sahiptir.

Uyumluluk sürümü

yöntemi, SetCompatibilityVersion bir uygulamanın MVC 2.1 veya sonraki bir ASP.NET Core olası hataya neden olabilecek davranış değişikliklerini kabul ASP.NET Core veya geri almayı geri alene.

Daha fazla bilgi için bkz. ASP.NET Core MVC için uyumluluk sürümü.

Ek kaynaklar