Yeni Denetleyici Ekleme

tarafından Rick Anderson

Not

Visual Studio'nun en son sürümünü kullanarak bu öğreticinin güncelleştirilmiş bir sürümüne buradan ulaşabilirsiniz. Yeni öğreticide, bu öğreticide birçok geliştirme sağlayan ASP.NET Core MVC kullanılır.

Bu öğreticide, denetleyiciler ve görünümler ile ASP.NET Core MVC öğretmektedir. Razor Pages, web kullanıcı arabirimi oluşturmayı daha kolay ve daha üretken hale getiren sayfa tabanlı bir programlama modeli olan ASP.NET Core'de 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ı zorlamak 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 ve 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'daDenetleyiciler klasörüne sağ tıklayın ve ardından 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çık.

İskele 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çilidir.

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

denetleyici ekleme

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

Merhaba Dünya Denetleyicisi nokta c sn sekmesinin açık olduğunu gösteren ekran görüntüsü. Çözüm Gezgini Merhaba Dünya Denetleyici nokta c s alt klasörü ve Merhaba Dünya 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ılmıştı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 olacaktır. Yukarıdaki yöntemde kod doğrudan bir dize döndürdü. Sisteme yalnızca biraz HTML döndürmesini söylediniz ve döndüren de bu oldu!

Pencerede Bu varsayılan eylemim 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 içindeki 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 defaults bölümünde belirtilen "Home" 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. Bu nedenle /HelloWorld sınıfına eşler HelloWorldController . URL'nin ikinci bölümü, yürütülecek sınıftaki eylem yöntemini belirler. Bu nedenle /HelloWorld/Index sınıfının yönteminin HelloWorldController yürütülmesine neden Index olabilir. Yalnızca /HelloWorld'e göz atmak zorunda kaldığımıza ve yönteminin varsayılan olarak kullanıldığına Index dikkat edin. Bunun nedeni adlı Index yöntemin, açıkça belirtilmemişse denetleyicide çağrılacak varsayılan yöntem olmasıdır. URL kesiminin ( Parameters) üçüncü bölümü, yol verileri içindir. Yönlendirme verilerini bu öğreticinin ilerleyen bölümlerinde göreceğiz.

http://localhost:xxxx/HelloWorld/Welcome adresine gidin. 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 ve HelloWorldWelcome eylem yöntemidir. URL'nin bölümünü henüz kullanmadınız [Parameters] .

Pencerede Hoş Geldiniz eylem yöntemi metnini içeren yerel ana bilgisayar sekmesini gösteren ekran görüntüsü.

Örneği biraz değiştirerek URL'den denetleyiciye bazı parametre bilgilerini geçirelim (örneğin, /HelloWorld/Welcome?name=Scott&numtimes=4). Aşağıda gösterildiği gibi yönteminizi Welcome iki parametre içerecek şekilde değiştirin. Kodun C# isteğe bağlı-parametre özelliğini kullanarak parametre için hiçbir değer geçirilmemesi durumunda parametrenin numTimes varsayılan olarak 1 olması gerektiğini unutmayın.

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

Not

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 . How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.

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 ve numtimes için name 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 Merhaba Dünya eğik çizgi hoş geldiniz soru işareti adının Scott ve sayı çarpı 4'e eşit olduğu bir 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. ? işareti (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 Merhaba Dünya 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 kesimi yol parametresiyle ID.Welcome eşleşdi Eylem yöntemi, yöntemindeki URL belirtimi RegisterRoutes ile eşleşen bir parametre (ID) içeriyor.

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 sorgu dizeleri olarak geçirmek yerine rota verileri (yukarıdaki kimlikle yaptığımız gibi) olarak geçirmek daha normaldir. Hem hem numtimes de name parametrelerini URL'de yol verileri olarak geçirmek için bir yol 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 adresine /localhost:XXX/HelloWorld/Welcome/Scott/3gidin.

U R L yerel ana bilgisayar iki nokta üst üste 1 2 3 4 eğik çizgi Merhaba Dünya eğik çizgi Hoş geldiniz eğik çizgi Scott eğik çizgi 3 bulunan 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ü yapıyor, yani görünüm ve denetleyici çalışıyor. Denetleyici html'yi doğrudan 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.