Yeni Denetleyici Ekleme

tarafından Rick Anderson

Uyarı

Visual Studio'nun en son sürümü kullanılarak bu öğreticinin güncelleştirilmiş bir sürümü burada kullanılabilir. Yeni öğretici, ASP.NET Core MVC kullanarak, bu öğreticiye göre birçok geliştirme sunmaktadır.

Bu öğretici, denetleyiciler ve görünümlerle ASP.NET Core MVC'yi öğretir. Razor Pages, web kullanıcı arabirimi oluşturmayı kolaylaştıran ve daha üretken hale getiren sayfa tabanlı bir programlama modeli olan ASP.NET Core'daki yeni bir alternatiftir. Razor Pages öğreticisini MVC sürümünden önce denemenizi öneririz. Razor Pages öğreticisi:

  • Takip etmek daha kolaydır.
  • Daha fazla özelliği kapsar.
  • Yeni uygulama geliştirme için tercih edilen yaklaşımdır.

MVC, model-görünüm denetleyicisi anlamına gelir. MVC, iyi tasarlanmış, test edilebilir ve bakımı kolay uygulamalar geliştirmeye yönelik bir desendir. MVC tabanlı uygulamalar:

  • M odels: Uygulamanın verilerini temsil eden ve bu veriler için iş kurallarını zorunlu kılmak için doğrulama mantığı kullanan sınıflar.
  • V iews: Uygulamanızın DINAMIK OLARAK HTML yanıtları oluşturmak için kullandığı şablon dosyaları.
  • C ontrollers: Gelen tarayıcı isteklerini işleyen, model verilerini alan ve ardından tarayıcıya yanıt döndüren görünüm şablonlarını belirten sınıflar.

Bu öğretici serisindeki tüm bu kavramları kapsayan bir uygulama oluşturmak için bunları nasıl kullanacağınızı göstereceğiz.

Bir denetleyici sınıfı oluşturarak başlayalım. Çözüm Gezgini'ndeDenetleyiciler klasörüne sağ tıklayın ve ekle'ye ve ardından Denetleyici'ye tıklayın.

Çözüm Gezgini penceresini gösteren ekran görüntüsü. Denetleyiciler sağ tıklama menüsü ve Ekle alt menüsü açıktır.

Yapı İskelesi Ekle iletişim kutusunda, MVC 5 Denetleyici - Boş'a ve ardından Ekle'ye tıklayın.

yapı iskelesi ekle iletişim kutusunu gösteren ekran görüntüsü. M V C 5 Denetleyici Boş seçili.

Yeni denetleyicinize "HelloWorldController" adını verin ve Ekle'ye tıklayın.

denetleyici ekleme

Çözüm Gezgini'ndeHelloWorldController.cs adlı yeni bir dosya ve Views\HelloWorld adlı yeni bir klasör oluşturulduğuna dikkat edin. Denetleyici IDE'de açık.

Hello World Controller dot c s tab open değerini gösteren ekran görüntüsü. Çözüm Gezgini'nde Hello World Controller dot c s alt klasörü ve Hello World alt klasörü kırmızıyla daire içine alınır.

Dosyanın içeriğini aşağıdaki kodla değiştirin.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

Denetleyici yöntemleri örnek olarak bir HTML dizesi döndürür. Denetleyici adlandırılır HelloWorldController ve ilk yöntem olarak adlandırılır Index. Şimdi tarayıcıdan çağıralım. Uygulamayı çalıştırın (F5 veya Ctrl+F5 tuşlarına basın). Tarayıcıda, adres çubuğundaki yola "HelloWorld" ekleyin. (Örneğin, aşağıdaki çizimde verilmiştir http://localhost:1234/HelloWorld.) Tarayıcıdaki sayfa aşağıdaki ekran görüntüsüne benzer. Yukarıdaki yöntemde kod doğrudan bir dize döndürdü. Sisteme yalnızca HTML döndürmesini söylediniz ve sistem bunu yaptı!

Bu, penceredeki varsayılan eylemimdir metnini içeren yerel ana bilgisayar sekmesini gösteren ekran görüntüsü.

ASP.NET MVC, gelen URL'ye bağlı olarak farklı denetleyici sınıflarını (ve bunların içinde farklı eylem yöntemlerini) çağırır. ASP.NET 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çimini App_Start/RouteConfig.cs dosyasında ayarlarsınız.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Uygulamayı çalıştırdığınızda ve herhangi bir URL kesimi sağlamadığınızda, varsayılan olarak yukarıdaki kodun varsayılanlar bölümünde belirtilen "Giriş" denetleyicisi ve "Dizin" eylem yöntemi kullanılır.

URL'nin ilk bölümü yürütülecek denetleyici sınıfını belirler. Böylece /HelloWorld, HelloWorldController sınıfına eşlenir. URL'nin ikinci bölümü, yürütülecek sınıftaki eylem yöntemini belirler. Bu nedenle /HelloWorld/IndexHelloWorldController sınıfının Index yönteminin yürütülmesine neden olur. Yalnızca /HelloWorld'e göz atmak zorunda kaldığımıza ve yöntemin varsayılan olarak kullanıldığına Index dikkat edin. Bunun nedeni, adlandırılmış Index bir yöntemin açıkça belirtilmemişse denetleyicide çağrılan varsayılan yöntem olmasıdır. URL kesiminin ( Parameters) üçüncü bölümü yol verileri içindir. Yönlendirme verilerini bu kılavuzun ileriki kısımlarında göreceğiz.

http://localhost:xxxx/HelloWorld/Welcome adresine göz atın. Welcome yöntemi çalışır ve "Bu Hoş Geldiniz eylem yöntemidir..." dizesini döndürür. Varsayılan MVC eşlemesi şeklindedir /[Controller]/[ActionName]/[Parameters]. Bu URL için denetleyici HelloWorld ve eylem yöntemi Welcome'dir. Henüz URL'nin [Parameters] bölümünü kullanmadınız.

Bu, penceredeki Hoş Geldiniz eylem yöntem metnini içeren yerel ana bilgisayar sekmesini gösteren ekran görüntüsü.

Url'den denetleyiciye bazı parametre bilgilerini geçirebilmeniz için örneği biraz değiştirelim (örneğin, /HelloWorld/Welcome?name=Scott&numtimes=4). Yönteminizi Welcome aşağıda gösterildiği gibi iki parametre içerecek şekilde değiştirin. Kodda, parametre için hiçbir değer geçirilmemesi durumunda parametrenin numTimes varsayılan olarak 1 olması gerektiğini belirtmek için C# isteğe bağlı-parametre özelliğinin kullanıldığına dikkat edin.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Uyarı

Güvenlik Notu: Yukarıdaki kod, uygulamayı kötü amaçlı girişlerden (JavaScript) korumak için HttpUtility.HtmlEncode kullanır. Daha fazla bilgi için bkz: Bir Web Uygulamasında Betik İhlallerine Karşı HTML Kodlamasıyla Koruma.

Uygulamanızı çalıştırın ve örnek URL'ye (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4 ) göz atın. URL'de name ve numtimes için farklı değerler deneyebilirsiniz. ASP.NET MVC model bağlama sistemi, adlandırılmış parametreleri adres çubuğundaki sorgu dizesinden yönteminizdeki parametrelere otomatik olarak eşler.

U R L yerel ana bilgisayar iki nokta üst üste 1 2 3 4 eğik çizgi Hello World eğik çizgi Hoş geldiniz soru işareti adı Scott'a ve sayı süreleri 4'e eşit olan tarayıcı penceresini gösteren ekran görüntüsü. Penceredeki metin Hello Scott Num Times 4 şeklindedir.

Yukarıdaki örnekte URL kesimi ( Parameters) kullanılmaz, name ve numTimes parametreleri sorgu dizesi olarak geçirilir. Şu mu? (soru işareti) yukarıdaki URL'de bir ayırıcıdır ve sorgu dizeleri bunu izler. & karakteri sorgu dizelerini ayırır.

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

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

Uygulamayı çalıştırın ve aşağıdaki URL'yi girin: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

U R L yerel ana bilgisayar iki nokta üst üste 1 2 3 4 eğik çizgi Hello World eğik çizgi Hoş geldiniz eğik çizgi 1 soru işareti adının scott'a eşit olduğu bir tarayıcı penceresini gösteren ekran görüntüsü. Penceredeki metin Merhaba Scott Kimliği 1'dir.

Bu kez, üçüncü URL segmenti, yol parametresi ID. ile eşleşti. Eylem Welcome yönteminde, URL belirtimi yöntemindeki ID ile eşleşen bir parametre (RegisterRoutes) bulunur.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

ASP.NET MVC uygulamalarında, parametreleri yol verileri olarak geçirmek (yukarıdaki kimlikle yaptığımız gibi) bunları sorgu dizesi olarak geçirmekten daha normaldir. Hem name hem de numtimes parametrelerini URL'de rota verileri olarak geçirmek için bir rota da ekleyebilirsiniz. App_Start\RouteConfig.cs dosyasına "Hello" yolunu ekleyin:

public class RouteConfig
{
   public static void RegisterRoutes(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );

      routes.MapRoute(
           name: "Hello",
           url: "{controller}/{action}/{name}/{id}"
       );
   }
}

Uygulamayı çalıştırın ve /localhost:XXX/HelloWorld/Welcome/Scott/3 adresine gidin.

U R L yerel konak iki nokta üst üste 1 2 3 4 eğik çizgi Hello World eğik çizgi Hoş geldiniz eğik çizgi Scott eğik çizgi 3 ile bir tarayıcı penceresini gösteren ekran görüntüsü. Penceredeki metin Merhaba Scott Kimliği 3'dür.

Birçok MVC uygulaması için varsayılan yol düzgün çalışır. Bu öğreticinin ilerleyen bölümlerinde model bağlayıcısını kullanarak veri geçirmeyi öğreneceksiniz ve bunun için varsayılan yolu değiştirmeniz gerekmez.

Bu örneklerde denetleyici, MVC'nin "VC" bölümünü, yani görünüm ve denetleyici çalışmasını gerçekleştirmiştir. Denetleyici doğrudan HTML döndürer. Normalde denetleyicilerin doğrudan HTML döndürmesini istemezsiniz, çünkü bu kod için çok hantal hale gelir. Bunun yerine, HTML yanıtının oluşturulmasına yardımcı olması için genellikle ayrı bir görünüm şablonu dosyası kullanacağız. Şimdi bunu nasıl yapabileceğimize bakalım.