Bölüm 2, ASP.NET Core MVC uygulamasına denetleyici ekleme

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Gönderen Rick Anderson

Model-View-Controller (MVC) mimari deseni bir uygulamayı üç ana bileşene ayırır: Model, View ve Controller. MVC düzeni, geleneksel monolitik uygulamalara göre daha test edilebilir ve güncelleştirilebilir uygulamalar oluşturmanıza yardımcı olur.

MVC tabanlı uygulamalar:

  • Models: Uygulamanın verilerini temsil eden sınıflar. Model sınıfları, bu veriler için iş kurallarını zorunlu kılmak için doğrulama mantığını kullanır. Model nesneleri genellikle bir veritabanında model durumunu alır ve depolar. Bu öğreticide, model Movie bir veritabanından film verilerini alır, görünüme sağlar veya güncelleştirir. Güncelleştirilmiş veriler bir veritabanına yazılır.
  • Views: Görünümler, uygulamanın kullanıcı arabirimini (UI) görüntüleyen bileşenlerdir. Genellikle bu kullanıcı arabirimi model verilerini görüntüler.
  • Controllers: Şu sınıflar:
    • Tarayıcı isteklerini işleyin.
    • Model verilerini alma.
    • Yanıt döndüren çağrı görünümü şablonları.

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ıtlar. Örneğin, denetleyici URL kesimlerini ve sorgu dizesi değerlerini işler ve bu değerleri modele geçirir. Model, veritabanını sorgulamak için bu değerleri kullanabilir. Örneğin:

  • https://localhost:5001/Home/Privacy: denetleyiciyi Home ve Privacy eylemi belirtir.
  • https://localhost:5001/Movies/Edit/5: denetleyiciyi ve eylemi kullanarak Movies id=5 ile filmi düzenleme isteğidir ve Edit öğreticinin ilerleyen bölümlerinde ayrıntılı olarak açıklanacaktır.

Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

MVC mimari deseni, bir uygulamayı üç ana bileşen grubuna ayırır: Modeller, Görünümler ve Denetleyiciler. Bu düzen, endişelerin ayrılmasına yardımcı olur: Kullanıcı arabirimi mantığı görünüme aittir. Giriş mantığı denetleyiciye aittir. İş mantığı modele aittir. Bu ayrım, bir uygulama oluştururken karmaşıklığın yönetilmesine yardımcı olur çünkü uygulamanın bir yönü üzerinde bir kerede başka bir uygulamanın kodunu etkilemeden çalışmaya olanak tanır. Örneğin, iş mantığı koduna bağlı olmadan görünüm kodu üzerinde çalışabilirsiniz.

Bu kavramlar, bir film uygulaması oluşturulurken bu öğretici serisinde tanıtılır ve gösterilir. MVC projesi, Denetleyiciler ve Görünümler için klasörler içerir.

Denetleyici ekleme

Çözüm Gezgini'da Denetleyiciler > Denetleyici Ekle'ye > sağ tıklayın.

Çözüm Gezgini, Denetleyiciler'e > sağ tıklayın Denetleyici Ekle >

Yeni İskeleli Öğe Ekle iletişim kutusunda MVC Denetleyicisi - Boş>Ekle'yi seçin.

MVC denetleyicisi ekleme

Yeni Öğe Ekle - MvcMovie iletişim kutusunda, girin HelloWorldController.cs ve Ekle'yi seçin.

öğesinin içeriğini Controllers/HelloWorldController.cs aşağıdaki kodla değiştirin:

using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers;

public class HelloWorldController : Controller
{
    // 
    // GET: /HelloWorld/
    public string Index()
    {
        return "This is my default action...";
    }
    // 
    // GET: /HelloWorld/Welcome/ 
    public string Welcome()
    {
        return "This is the Welcome action method...";
    }
}

Bir denetleyicideki her public yöntem HTTP uç noktası olarak çağrılabilir. Yukarıdaki örnekte, her iki yöntem de bir dize döndürür. Her yöntemden önceki açıklamaları not edin.

HTTP uç noktası:

  • Gibi web uygulamasında https://localhost:5001/HelloWorldhedeflenebilir bir URL'dir.
  • Birleştiren:
    • Kullanılan protokol: HTTPS.
    • TCP bağlantı noktası da dahil olmak üzere web sunucusunun ağ konumu: localhost:5001.
    • Hedef URI: HelloWorld.

İlk açıklama bunun temel URL'ye eklenerek /HelloWorld/ çağrılan bir HTTP GET yöntemi olduğunu belirtir.

İkinci açıklama, URL'ye eklenerek /HelloWorld/Welcome/ çağrılan bir HTTP GET yöntemini belirtir. Öğreticinin ilerleyen bölümlerinde, verileri güncelleştiren yöntemler oluşturmak HTTP POST için iskele altyapısı kullanılır.

Ctrl+F5 (Windows) veya ⌘+F5 (macOS) tuşlarına basarak uygulamayı hata ayıklayıcı olmadan çalıştırın.

Adres çubuğundaki yola ekleyin /HelloWorld . Index yöntemi bir dize döndürür.

Bu benim varsayılan eylemimdir'in bir uygulama yanıtını gösteren tarayıcı penceresi

MVC, gelen URL'ye bağlı olarak denetleyici sınıflarını ve bunların içindeki eylem yöntemlerini çağırır. MVC tarafından kullanılan varsayılan URL yönlendirme mantığı , hangi kodun çağrıldığını belirlemek için aşağıdakine benzer bir biçim kullanır:

/[Controller]/[ActionName]/[Parameters]

Yönlendirme biçimi dosyada Program.cs ayarlanır.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Uygulamaya göz attığınızda ve herhangi bir URL kesimi sağlamadığınızda, varsayılan olarak "Home" denetleyicisi ve yukarıda vurgulanan şablon satırında belirtilen "Dizin" yöntemi kullanılır. Önceki URL segmentlerinde:

  • İlk URL kesimi, çalıştırılacak denetleyici sınıfını belirler. Bu nedenle localhost:5001/HelloWorld HelloWorld Controller sınıfına eşler.
  • URL segmentinin ikinci bölümü, sınıfındaki eylem yöntemini belirler. Bu nedenlelocalhost:5001/HelloWorld/Index, sınıfının yönteminin HelloWorldController çalıştırılmasına neden olurIndex. Yalnızca adresine göz atmak localhost:5001/HelloWorld zorunda kaldığınıza ve yöntemin varsayılan olarak çağrıldığına Index dikkat edin. Index , bir yöntem adı açıkça belirtilmezse denetleyicide çağrılacak varsayılan yöntemdir.
  • URL kesiminin ( id) üçüncü bölümü yol verileri içindir. Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

Adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome. değerini bağlantı noktası numaranızla değiştirin {PORT} .

Welcome yöntemi çalışır ve dizesini This is the Welcome action method...döndürür. Bu URL için denetleyici HelloWorldWelcome ve eylem yöntemidir. URL'nin bölümünü henüz kullanmadınız [Parameters] .

Bu, Hoş Geldiniz eylemi yönteminin uygulama yanıtını gösteren tarayıcı penceresi

URL'den denetleyiciye bazı parametre bilgilerini geçirmek için kodu değiştirin. Örneğin, /HelloWorld/Welcome?name=Rick&numtimes=4.

Welcome yöntemini, aşağıdaki kodda gösterildiği gibi iki parametre içerecek şekilde değiştirin.

// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Yukarıdaki kod:

  • Bu parametre için hiçbir değer geçirilmediyse parametrenin numTimes varsayılan olarak 1 olduğunu belirtmek için C# isteğe bağlı-parametre özelliğini kullanır.
  • Uygulamayı JavaScript gibi kötü amaçlı girişlere karşı korumak için kullanır HtmlEncoder.Default.Encode .
  • içinde $"Hello {name}, NumTimes is: {numTimes}"İlişkili Dizeleri kullanır.

Uygulamayı çalıştırın ve adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. değerini bağlantı noktası numaranızla değiştirin {PORT} .

URL'de ve numtimes için name farklı değerler deneyin. MVC model bağlama sistemi, adlandırılmış parametreleri sorgu dizesinden yöntemindeki parametrelere otomatik olarak eşler. Daha fazla bilgi için bkz . Model Bağlama .

Hello Rick'in uygulama yanıtını gösteren tarayıcı penceresi, NumTimes şöyledir: 4

Önceki resimde:

  • URL kesimi Parameters kullanılmaz.
  • name ve numTimes parametreleri sorgu dizesinde geçirilir.
  • ? Yukarıdaki URL'deki (soru işareti) bir ayırıcıdır ve sorgu dizesi aşağıdaki gibidir.
  • Karakter, & alan-değer çiftlerini ayırır.

Welcome yöntemini aşağıdaki kod ile değiştirin:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Uygulamayı çalıştırın ve aşağıdaki URL'yi girin: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

Yukarıdaki URL'de:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? sorgu dizesini başlatır.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Yukarıdaki örnekte:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? (içinde id?) parametresinin id isteğe bağlı olduğunu gösterir.

Model-View-Controller (MVC) mimari deseni bir uygulamayı üç ana bileşene ayırır: Model, View ve Controller. MVC düzeni, geleneksel monolitik uygulamalara göre daha test edilebilir ve güncelleştirilebilir uygulamalar oluşturmanıza yardımcı olur.

MVC tabanlı uygulamalar:

  • Models: Uygulamanın verilerini temsil eden sınıflar. Model sınıfları, bu veriler için iş kurallarını zorunlu kılmak için doğrulama mantığını kullanır. Model nesneleri genellikle bir veritabanında model durumunu alır ve depolar. Bu öğreticide, model Movie bir veritabanından film verilerini alır, görünüme sağlar veya güncelleştirir. Güncelleştirilmiş veriler bir veritabanına yazılır.
  • Views: Görünümler, uygulamanın kullanıcı arabirimini (UI) görüntüleyen bileşenlerdir. Genellikle bu kullanıcı arabirimi model verilerini görüntüler.
  • Controllers: Şu sınıflar:
    • Tarayıcı isteklerini işleyin.
    • Model verilerini alma.
    • Yanıt döndüren çağrı görünümü şablonları.

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ıtlar. Örneğin, denetleyici URL kesimlerini ve sorgu dizesi değerlerini işler ve bu değerleri modele geçirir. Model, veritabanını sorgulamak için bu değerleri kullanabilir. Örneğin:

  • https://localhost:5001/Home/Privacy: denetleyiciyi Home ve Privacy eylemi belirtir.
  • https://localhost:5001/Movies/Edit/5: denetleyiciyi ve eylemi kullanarak Movies id=5 ile filmi düzenleme isteğidir ve Edit öğreticinin ilerleyen bölümlerinde ayrıntılı olarak açıklanacaktır.

Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

MVC mimari deseni, bir uygulamayı üç ana bileşen grubuna ayırır: Modeller, Görünümler ve Denetleyiciler. Bu düzen, endişelerin ayrılmasına yardımcı olur: Kullanıcı arabirimi mantığı görünüme aittir. Giriş mantığı denetleyiciye aittir. İş mantığı modele aittir. Bu ayrım, bir uygulama oluştururken karmaşıklığın yönetilmesine yardımcı olur çünkü uygulamanın bir yönü üzerinde bir kerede başka bir uygulamanın kodunu etkilemeden çalışmaya olanak tanır. Örneğin, iş mantığı koduna bağlı olmadan görünüm kodu üzerinde çalışabilirsiniz.

Bu kavramlar, bir film uygulaması oluşturulurken bu öğretici serisinde tanıtılır ve gösterilir. MVC projesi, Denetleyiciler ve Görünümler için klasörler içerir.

Denetleyici ekleme

Çözüm Gezgini'da Denetleyiciler > Denetleyici Ekle'ye > sağ tıklayın.

Çözüm Gezgini, Denetleyiciler'e > sağ tıklayın Denetleyici Ekle >

Yeni İskeleli Öğe Ekle iletişim kutusunda MVC Denetleyicisi - Boş>Ekle'yi seçin.

MVC denetleyicisi ekleme

Yeni Öğe Ekle - MvcMovie iletişim kutusunda, girin HelloWorldController.cs ve Ekle'yi seçin.

öğesinin içeriğini Controllers/HelloWorldController.cs aşağıdaki kodla değiştirin:

using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers;

public class HelloWorldController : Controller
{
    // 
    // GET: /HelloWorld/
    public string Index()
    {
        return "This is my default action...";
    }
    // 
    // GET: /HelloWorld/Welcome/ 
    public string Welcome()
    {
        return "This is the Welcome action method...";
    }
}

Bir denetleyicideki her public yöntem HTTP uç noktası olarak çağrılabilir. Yukarıdaki örnekte, her iki yöntem de bir dize döndürür. Her yöntemden önceki açıklamaları not edin.

HTTP uç noktası:

  • Gibi web uygulamasında https://localhost:5001/HelloWorldhedeflenebilir bir URL'dir.
  • Birleştiren:
    • Kullanılan protokol: HTTPS.
    • TCP bağlantı noktası da dahil olmak üzere web sunucusunun ağ konumu: localhost:5001.
    • Hedef URI: HelloWorld.

İlk açıklama bunun temel URL'ye eklenerek /HelloWorld/ çağrılan bir HTTP GET yöntemi olduğunu belirtir.

İkinci açıklama, URL'ye eklenerek /HelloWorld/Welcome/ çağrılan bir HTTP GET yöntemini belirtir. Öğreticinin ilerleyen bölümlerinde, verileri güncelleştiren yöntemler oluşturmak HTTP POST için iskele altyapısı kullanılır.

Ctrl+F5 (Windows) veya ⌘+F5 (macOS) tuşlarına basarak uygulamayı hata ayıklayıcı olmadan çalıştırın.

Adres çubuğundaki yola ekleyin /HelloWorld . Index yöntemi bir dize döndürür.

Bu benim varsayılan eylemimdir'in bir uygulama yanıtını gösteren tarayıcı penceresi

MVC, gelen URL'ye bağlı olarak denetleyici sınıflarını ve bunların içindeki eylem yöntemlerini çağırır. MVC tarafından kullanılan varsayılan URL yönlendirme mantığı , hangi kodun çağrıldığını belirlemek için aşağıdakine benzer bir biçim kullanır:

/[Controller]/[ActionName]/[Parameters]

Yönlendirme biçimi dosyada Program.cs ayarlanır.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Uygulamaya göz attığınızda ve herhangi bir URL kesimi sağlamadığınızda, varsayılan olarak "Home" denetleyicisi ve yukarıda vurgulanan şablon satırında belirtilen "Dizin" yöntemi kullanılır. Önceki URL segmentlerinde:

  • İlk URL kesimi, çalıştırılacak denetleyici sınıfını belirler. Bu nedenle localhost:5001/HelloWorld HelloWorld Controller sınıfına eşler.
  • URL segmentinin ikinci bölümü, sınıfındaki eylem yöntemini belirler. Bu nedenlelocalhost:5001/HelloWorld/Index, sınıfının yönteminin HelloWorldController çalıştırılmasına neden olurIndex. Yalnızca adresine göz atmak localhost:5001/HelloWorld zorunda kaldığınıza ve yöntemin varsayılan olarak çağrıldığına Index dikkat edin. Index , bir yöntem adı açıkça belirtilmezse denetleyicide çağrılacak varsayılan yöntemdir.
  • URL kesiminin ( id) üçüncü bölümü yol verileri içindir. Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

Adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome. değerini bağlantı noktası numaranızla değiştirin {PORT} .

Welcome yöntemi çalışır ve dizesini This is the Welcome action method...döndürür. Bu URL için denetleyici HelloWorldWelcome ve eylem yöntemidir. URL'nin bölümünü henüz kullanmadınız [Parameters] .

Bu, Hoş Geldiniz eylemi yönteminin uygulama yanıtını gösteren tarayıcı penceresi

URL'den denetleyiciye bazı parametre bilgilerini geçirmek için kodu değiştirin. Örneğin, /HelloWorld/Welcome?name=Rick&numtimes=4.

Welcome yöntemini, aşağıdaki kodda gösterildiği gibi iki parametre içerecek şekilde değiştirin.

// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Yukarıdaki kod:

  • Bu parametre için hiçbir değer geçirilmediyse parametrenin numTimes varsayılan olarak 1 olduğunu belirtmek için C# isteğe bağlı-parametre özelliğini kullanır.
  • Uygulamayı JavaScript gibi kötü amaçlı girişlere karşı korumak için kullanır HtmlEncoder.Default.Encode .
  • içinde $"Hello {name}, NumTimes is: {numTimes}"İlişkili Dizeleri kullanır.

Uygulamayı çalıştırın ve adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. değerini bağlantı noktası numaranızla değiştirin {PORT} .

URL'de ve numtimes için name farklı değerler deneyin. MVC model bağlama sistemi, adlandırılmış parametreleri sorgu dizesinden yöntemindeki parametrelere otomatik olarak eşler. Daha fazla bilgi için bkz . Model Bağlama .

Hello Rick'in uygulama yanıtını gösteren tarayıcı penceresi, NumTimes şöyledir: 4

Önceki resimde:

  • URL kesimi Parameters kullanılmaz.
  • name ve numTimes parametreleri sorgu dizesinde geçirilir.
  • ? Yukarıdaki URL'deki (soru işareti) bir ayırıcıdır ve sorgu dizesi aşağıdaki gibidir.
  • Karakter, & alan-değer çiftlerini ayırır.

Welcome yöntemini aşağıdaki kod ile değiştirin:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Uygulamayı çalıştırın ve aşağıdaki URL'yi girin: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

Yukarıdaki URL'de:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? sorgu dizesini başlatır.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Yukarıdaki örnekte:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? (içinde id?) parametresinin id isteğe bağlı olduğunu gösterir.

Model-View-Controller (MVC) mimari deseni bir uygulamayı üç ana bileşene ayırır: Model, View ve Controller. MVC düzeni, geleneksel monolitik uygulamalara göre daha test edilebilir ve güncelleştirilebilir uygulamalar oluşturmanıza yardımcı olur.

MVC tabanlı uygulamalar:

  • Models: Uygulamanın verilerini temsil eden sınıflar. Model sınıfları, bu veriler için iş kurallarını zorunlu kılmak için doğrulama mantığını kullanır. Model nesneleri genellikle bir veritabanında model durumunu alır ve depolar. Bu öğreticide, model Movie bir veritabanından film verilerini alır, görünüme sağlar veya güncelleştirir. Güncelleştirilmiş veriler bir veritabanına yazılır.
  • Views: Görünümler, uygulamanın kullanıcı arabirimini (UI) görüntüleyen bileşenlerdir. Genellikle bu kullanıcı arabirimi model verilerini görüntüler.
  • Controllers: Şu sınıflar:
    • Tarayıcı isteklerini işleyin.
    • Model verilerini alma.
    • Yanıt döndüren çağrı görünümü şablonları.

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ıtlar. Örneğin, denetleyici URL kesimlerini ve sorgu dizesi değerlerini işler ve bu değerleri modele geçirir. Model, veritabanını sorgulamak için bu değerleri kullanabilir. Örneğin:

  • https://localhost:5001/Home/Privacy: denetleyiciyi Home ve Privacy eylemi belirtir.
  • https://localhost:5001/Movies/Edit/5: denetleyiciyi ve eylemi kullanarak Movies id=5 ile filmi düzenleme isteğidir ve Edit öğreticinin ilerleyen bölümlerinde ayrıntılı olarak açıklanacaktır.

Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

MVC mimari deseni, bir uygulamayı üç ana bileşen grubuna ayırır: Modeller, Görünümler ve Denetleyiciler. Bu düzen, endişelerin ayrılmasına yardımcı olur: Kullanıcı arabirimi mantığı görünüme aittir. Giriş mantığı denetleyiciye aittir. İş mantığı modele aittir. Bu ayrım, bir uygulama oluştururken karmaşıklığın yönetilmesine yardımcı olur çünkü uygulamanın bir yönü üzerinde bir kerede başka bir uygulamanın kodunu etkilemeden çalışmaya olanak tanır. Örneğin, iş mantığı koduna bağlı olmadan görünüm kodu üzerinde çalışabilirsiniz.

Bu kavramlar, bir film uygulaması oluşturulurken bu öğretici serisinde tanıtılır ve gösterilir. MVC projesi, Denetleyiciler ve Görünümler için klasörler içerir.

Denetleyici ekleme

Çözüm Gezgini'da Denetleyiciler > Denetleyici Ekle'ye > sağ tıklayın.

Çözüm Gezgini, Denetleyiciler'e > sağ tıklayın Denetleyici Ekle >

Yeni İskeleli Öğe Ekle iletişim kutusunda MVC Denetleyicisi - Boş>Ekle'yi seçin.

MVC denetleyicisi ekleme

Yeni Öğe Ekle - MvcMovie iletişim kutusunda, girin HelloWorldController.cs ve Ekle'yi seçin.

öğesinin içeriğini Controllers/HelloWorldController.cs aşağıdaki kodla değiştirin:

using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // 
        // GET: /HelloWorld/

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}

Bir denetleyicideki her public yöntem HTTP uç noktası olarak çağrılabilir. Yukarıdaki örnekte, her iki yöntem de bir dize döndürür. Her yöntemden önceki açıklamaları not edin.

HTTP uç noktası:

  • Gibi web uygulamasında https://localhost:5001/HelloWorldhedeflenebilir bir URL'dir.
  • Birleştiren:
    • Kullanılan protokol: HTTPS.
    • TCP bağlantı noktası da dahil olmak üzere web sunucusunun ağ konumu: localhost:5001.
    • Hedef URI: HelloWorld.

İlk açıklama bunun temel URL'ye eklenerek /HelloWorld/ çağrılan bir HTTP GET yöntemi olduğunu belirtir.

İkinci açıklama, URL'ye eklenerek /HelloWorld/Welcome/ çağrılan bir HTTP GET yöntemini belirtir. Öğreticinin ilerleyen bölümlerinde, verileri güncelleştiren yöntemler oluşturmak HTTP POST için iskele altyapısı kullanılır.

Uygulamayı hata ayıklayıcı olmadan çalıştırın.

Adres çubuğundaki yola "HelloWorld" ekleyin. Index yöntemi bir dize döndürür.

Bu benim varsayılan eylemimdir'in bir uygulama yanıtını gösteren tarayıcı penceresi

MVC, gelen URL'ye bağlı olarak denetleyici sınıflarını ve bunların içindeki eylem yöntemlerini çağırır. MVC tarafından kullanılan varsayılan URL yönlendirme mantığı , hangi kodun çağrıldığını belirlemek için aşağıdakine benzer bir biçim kullanır:

/[Controller]/[ActionName]/[Parameters]

Yönlendirme biçimi dosyada Program.cs ayarlanır.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Uygulamaya göz attığınızda ve herhangi bir URL kesimi sağlamadığınızda, varsayılan olarak "Home" denetleyicisi ve yukarıda vurgulanan şablon satırında belirtilen "Dizin" yöntemi kullanılır. Önceki URL segmentlerinde:

  • İlk URL kesimi, çalıştırılacak denetleyici sınıfını belirler. Bu nedenle localhost:5001/HelloWorld HelloWorld Controller sınıfına eşler.
  • URL segmentinin ikinci bölümü, sınıfındaki eylem yöntemini belirler. Bu nedenlelocalhost:5001/HelloWorld/Index, sınıfının yönteminin HelloWorldController çalıştırılmasına neden olurIndex. Yalnızca adresine göz atmak localhost:5001/HelloWorld zorunda kaldığınıza ve yöntemin varsayılan olarak çağrıldığına Index dikkat edin. Index , bir yöntem adı açıkça belirtilmezse denetleyicide çağrılacak varsayılan yöntemdir.
  • URL kesiminin ( id) üçüncü bölümü yol verileri içindir. Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

Adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome. değerini bağlantı noktası numaranızla değiştirin {PORT} .

Welcome yöntemi çalışır ve dizesini This is the Welcome action method...döndürür. Bu URL için denetleyici HelloWorldWelcome ve eylem yöntemidir. URL'nin bölümünü henüz kullanmadınız [Parameters] .

Bu, Hoş Geldiniz eylemi yönteminin uygulama yanıtını gösteren tarayıcı penceresi

URL'den denetleyiciye bazı parametre bilgilerini geçirmek için kodu değiştirin. Örneğin, /HelloWorld/Welcome?name=Rick&numtimes=4.

Welcome yöntemini, aşağıdaki kodda gösterildiği gibi iki parametre içerecek şekilde değiştirin.

// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Yukarıdaki kod:

  • Bu parametre için hiçbir değer geçirilmediyse parametrenin numTimes varsayılan olarak 1 olduğunu belirtmek için C# isteğe bağlı-parametre özelliğini kullanır.
  • Uygulamayı JavaScript gibi kötü amaçlı girişlere karşı korumak için kullanır HtmlEncoder.Default.Encode .
  • içinde $"Hello {name}, NumTimes is: {numTimes}"İlişkili Dizeleri kullanır.

Uygulamayı çalıştırın ve adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. değerini bağlantı noktası numaranızla değiştirin {PORT} .

URL'de ve numtimes için name farklı değerler deneyin. MVC model bağlama sistemi, adlandırılmış parametreleri sorgu dizesinden yöntemindeki parametrelere otomatik olarak eşler. Daha fazla bilgi için bkz . Model Bağlama .

Hello Rick'in uygulama yanıtını gösteren tarayıcı penceresi, NumTimes şöyledir: 4

Önceki resimde:

  • URL kesimi Parameters kullanılmaz.
  • name ve numTimes parametreleri sorgu dizesinde geçirilir.
  • ? Yukarıdaki URL'deki (soru işareti) bir ayırıcıdır ve sorgu dizesi aşağıdaki gibidir.
  • Karakter, & alan-değer çiftlerini ayırır.

Welcome yöntemini aşağıdaki kod ile değiştirin:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Uygulamayı çalıştırın ve aşağıdaki URL'yi girin: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

Yukarıdaki URL'de:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? sorgu dizesini başlatır.
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Yukarıdaki örnekte:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? (içinde id?) parametresinin id isteğe bağlı olduğunu gösterir.

Model-View-Controller (MVC) mimari deseni bir uygulamayı üç ana bileşene ayırır: Model, View ve Controller. MVC düzeni, geleneksel monolitik uygulamalara göre daha test edilebilir ve güncelleştirilebilir uygulamalar oluşturmanıza yardımcı olur.

MVC tabanlı uygulamalar:

  • Models: Uygulamanın verilerini temsil eden sınıflar. Model sınıfları, bu veriler için iş kurallarını zorunlu kılmak için doğrulama mantığını kullanır. Model nesneleri genellikle bir veritabanında model durumunu alır ve depolar. Bu öğreticide, model Movie bir veritabanından film verilerini alır, görünüme sağlar veya güncelleştirir. Güncelleştirilmiş veriler bir veritabanına yazılır.
  • Views: Görünümler, uygulamanın kullanıcı arabirimini (UI) görüntüleyen bileşenlerdir. Genellikle bu kullanıcı arabirimi model verilerini görüntüler.
  • Controllers: Şu sınıflar:
    • Tarayıcı isteklerini işleyin.
    • Model verilerini alma.
    • Yanıt döndüren çağrı görünümü şablonları.

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ıtlar. Örneğin, denetleyici URL kesimlerini ve sorgu dizesi değerlerini işler ve bu değerleri modele geçirir. Model, veritabanını sorgulamak için bu değerleri kullanabilir. Örneğin:

  • https://localhost:5001/Home/Privacy: denetleyiciyi Home ve Privacy eylemi belirtir.
  • https://localhost:5001/Movies/Edit/5: denetleyiciyi ve eylemi kullanarak Movies id=5 ile filmi düzenleme isteğidir ve Edit öğreticinin ilerleyen bölümlerinde ayrıntılı olarak açıklanacaktır.

Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

MVC mimari deseni, bir uygulamayı üç ana bileşen grubuna ayırır: Modeller, Görünümler ve Denetleyiciler. Bu düzen, endişelerin ayrılmasına yardımcı olur: Kullanıcı arabirimi mantığı görünüme aittir. Giriş mantığı denetleyiciye aittir. İş mantığı modele aittir. Bu ayrım, bir uygulama oluştururken karmaşıklığın yönetilmesine yardımcı olur çünkü uygulamanın bir yönü üzerinde bir kerede başka bir uygulamanın kodunu etkilemeden çalışmaya olanak tanır. Örneğin, iş mantığı koduna bağlı olmadan görünüm kodu üzerinde çalışabilirsiniz.

Bu kavramlar, bir film uygulaması oluşturulurken bu öğretici serisinde tanıtılır ve gösterilir. MVC projesi, Denetleyiciler ve Görünümler için klasörler içerir.

Denetleyici ekleme

Çözüm Gezgini Denetleyiciler > Denetleyici Ekle'ye > sağ tıklayın.

Çözüm Gezgini, Denetleyiciler'e > sağ tıklayın Denetleyici Ekle >

İskele Ekle iletişim kutusunda MVC Denetleyicisi - Boş'u seçin.

MVC denetleyicisini ekleme ve adlandırma

Yeni Öğe Ekle - MvcMovie iletişim kutusunda, girin HelloWorldController.cs ve Ekle'yi seçin.

öğesinin içeriğini Controllers/HelloWorldController.cs aşağıdakilerle değiştirin:

using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // 
        // GET: /HelloWorld/

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}

Bir denetleyicideki her public yöntem HTTP uç noktası olarak çağrılabilir. Yukarıdaki örnekte, her iki yöntem de bir dize döndürür. Her yöntemden önceki açıklamaları not edin.

HTTP uç noktası:

  • Gibi web uygulamasında https://localhost:5001/HelloWorldhedeflenebilir bir URL'dir.
  • Birleştiren:
    • Kullanılan protokol: HTTPS.
    • TCP bağlantı noktası da dahil olmak üzere web sunucusunun ağ konumu: localhost:5001.
    • Hedef URI: HelloWorld.

İlk açıklama bunun temel URL'ye eklenerek /HelloWorld/ çağrılan bir HTTP GET yöntemi olduğunu belirtir.

İkinci açıklama, URL'ye eklenerek /HelloWorld/Welcome/ çağrılan bir HTTP GET yöntemini belirtir. Öğreticinin ilerleyen bölümlerinde, verileri güncelleştiren yöntemler oluşturmak HTTP POST için iskele altyapısı kullanılır.

Uygulamayı hata ayıklayıcı olmadan çalıştırın.

Adres çubuğundaki yola "HelloWorld" ekleyin. Index yöntemi bir dize döndürür.

Bu benim varsayılan eylemimdir'in bir uygulama yanıtını gösteren tarayıcı penceresi

MVC, gelen URL'ye bağlı olarak denetleyici sınıflarını ve bunların içindeki eylem yöntemlerini çağırır. MVC tarafından kullanılan varsayılan URL yönlendirme mantığı , hangi kodun çağrıldığını belirlemek için aşağıdakine benzer bir biçim kullanır:

/[Controller]/[ActionName]/[Parameters]

Yönlendirme biçimi dosyasındaki yönteminde ConfigureStartup.cs ayarlanır.

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Uygulamaya göz attığınızda ve herhangi bir URL kesimi sağlamadığınızda, varsayılan olarak "Home" denetleyicisi ve yukarıda vurgulanan şablon satırında belirtilen "Dizin" yöntemi kullanılır. Önceki URL segmentlerinde:

  • İlk URL kesimi, çalıştırılacak denetleyici sınıfını belirler. Bu nedenle localhost:5001/HelloWorld HelloWorldController sınıfına eşler.
  • URL segmentinin ikinci bölümü, sınıfındaki eylem yöntemini belirler. Bu nedenlelocalhost:5001/HelloWorld/Index, sınıfının yönteminin HelloWorldController çalıştırılmasına neden olurIndex. Yalnızca adresine göz atmak localhost:5001/HelloWorld zorunda kaldığınıza ve yöntemin varsayılan olarak çağrıldığına Index dikkat edin. Index , bir yöntem adı açıkça belirtilmezse denetleyicide çağrılacak varsayılan yöntemdir.
  • URL kesiminin ( id) üçüncü bölümü yol verileri içindir. Yönlendirme verileri öğreticinin ilerleyen bölümlerinde açıklanmıştır.

Adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome. değerini bağlantı noktası numaranızla değiştirin {PORT} .

Welcome yöntemi çalışır ve dizesini This is the Welcome action method...döndürür. Bu URL için denetleyici HelloWorldWelcome ve eylem yöntemidir. URL'nin bölümünü henüz kullanmadınız [Parameters] .

Bu, Hoş Geldiniz eylemi yönteminin uygulama yanıtını gösteren tarayıcı penceresi

URL'den denetleyiciye bazı parametre bilgilerini geçirmek için kodu değiştirin. Örneğin, /HelloWorld/Welcome?name=Rick&numtimes=4.

Welcome yöntemini, aşağıdaki kodda gösterildiği gibi iki parametre içerecek şekilde değiştirin.

// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Yukarıdaki kod:

  • Bu parametre için hiçbir değer geçirilmediyse parametrenin numTimes varsayılan olarak 1 olduğunu belirtmek için C# isteğe bağlı-parametre özelliğini kullanır.
  • Uygulamayı JavaScript gibi kötü amaçlı girişlere karşı korumak için kullanır HtmlEncoder.Default.Encode .
  • içinde $"Hello {name}, NumTimes is: {numTimes}"İlişkili Dizeleri kullanır.

Uygulamayı çalıştırın ve adresine gidin: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4. değerini bağlantı noktası numaranızla değiştirin {PORT} .

URL'de ve numtimes için name farklı değerler deneyin. MVC model bağlama sistemi, adlandırılmış parametreleri sorgu dizesinden yöntemindeki parametrelere otomatik olarak eşler. Daha fazla bilgi için bkz . Model Bağlama .

Hello Rick'in uygulama yanıtını gösteren tarayıcı penceresi, NumTimes şöyledir: 4

Önceki resimde:

  • URL kesimi Parameters kullanılmaz.
  • name ve numTimes parametreleri sorgu dizesinde geçirilir.
  • ? Yukarıdaki URL'deki (soru işareti) bir ayırıcıdır ve sorgu dizesi aşağıdaki gibidir.
  • Karakter, & alan-değer çiftlerini ayırır.

Welcome yöntemini aşağıdaki kod ile değiştirin:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Uygulamayı çalıştırın ve aşağıdaki URL'yi girin: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

Yukarıdaki URL'de:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? sorgu dizesini başlatır.
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Yukarıdaki örnekte:

  • Üçüncü URL kesimi, yol parametresiyle ideşleşmiş.
  • yöntemi, Welcome yöntemindeki URL şablonuyla MapControllerRoute eşleşen bir parametre id içerir.
  • Sondaki ? (içinde id?) parametresinin id isteğe bağlı olduğunu gösterir.