3 Ekim 2023 Salı

Asp.Net 6 Projelerinde Log Yapısnın Eklenmesi

 Merhaba Arkadaşlar,

Asp.net core 6 ile geliştirdiğimiz bir projenin production'a çıktığında yani kullanıcılar tarafında kullanıma açıldığında buradaki yaşanan hatalı senaryoların kaydını tutmak gerekir ki bu bugfix aşamasında çok büyük önem taşımaktadır. Bu aşamada yapabileceğimiz kullanabileceğimiz log yapısını projemize eklemek için proje tarafında bazı konfigurasyonlar yapmak gerekecektir. 


Sırasıyla yapmamız gerekenleri aşağıdaki sırayla yapabiliriz.

Projemiz içerisindeki appsetting.json içerisine aşağıdaki gibi bir ayarlama yapmamız gerekir. Loglarında önem sırasını değiştirebileceğimiz ve hatalı olması durumundaki hataları loglamamız gerekiyorsa bu durumda bunu LogSettings içerisindeki LogLevel'da belirtebiliriz. Aşağıdaki örnekte sadece Error ve Info durumundaki logları yazmasını sağlamış olacağız.

appsettings.json

{

  "Logging": {

    "LogLevel": {

      "Default": "Error",

      "Microsoft.AspNetCore": "Warning",

      "IsBilge": "Information"

    }

  },

  "LogSettings": {

    "LogLevel": [ "Error", "Info" ]

  }

}


Log Ayarları için LogSettings.cs'i ekledik projemize ve kodlarınız aşağıdaki gibi yazdım.

   public class LogSettings

    {

        public List<string> LogLevel { get; set; }

    }


Log yapısını kullanabileceğimiz LogSettings'i de içerisinde barındıran LogService.cs yapısını ekledim.

    public class LogService

    {

        private readonly LogSettings _settings;

        public LogService(IOptions<LogSettings> settings)

        {

            _settings = settings.Value;

        }

        public List<string> GetLogLevel()

        {

            return _settings.LogLevel;

        }

     public void Log(string logFilePath, string log,string type)

        {

            string okunan = ""; //içine configten gelen değer ya da değerler gelecek.

            if (okunan.Contains(type)){

                System.IO.File.AppendAllText(logFilePath, log);

            }           

        }

    }

Program.cs içerisine aşağıdaki kodlarla register etmemiz gerekecektir.

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<LogSettings>(builder.Configuration.GetSection("LogSettings"));

builder.Services.AddScoped<LogService>(); // MyService sınıfınızı ekleyin

builder.Services.AddControllersWithViews();


Sıra geldi log yazmak istediğimiz Controller içerisindeki ilgili metotta bunları kullanmaya. 


    public class HomeController : Controller

    {        

        private readonly LogSettings_settings;

        private readonly LogService_myService;


        public HomeController(ILogger<HomeController> logger, LogService service, IOptions<LogSettings> settings)

        {

            _logger = logger;

            _settings = settings.Value;

            _myService = service;

        }

        public IActionResult Index()

        {

            _myService. Log(logFilePath, "bilgi amaçlıdır", "Info");

           _myService. Log(logFilePath, "hata var, "Error");

            return View();

        }

}

Log projedeki sıkıntılı durumları görmenizi sağladığı gibi kullanılma oranını da görmenize yardımcı olacaktir.

Log hayat kurtarır :)

İyi Çalışmalar,


4 Temmuz 2023 Salı

ASP.Net Core Projesinde Şifrelerimi Nasıl Şifrelerim?

Merhaba arkadaşlar,


Uygulama içerisinde kullanmış olduğunuz şifrelerinizi gizlemek isterseniz bu durumda Microsoft tarafından çıkartılmış bir package var. Bu paketi kullanarak şifrelenmiş halini tutarak sonrasında bu şifre decrypte ederek istediğiniz yerde kullanabilirsiniz. Bu sürecin algoritması ise aşağıdaki gibidir.

1. Microsoft.AspNetCore.DataProtection paketini kur.

2. appsettings.json içerisine alttaki gibi bir tanımlama yap.

  "Secrets": {

    "EncryptedPassword": ""

  }

3. 2 nolu basamaktaki EncryptedPassword yerine başka bir uygulamada mevcut şifrenin şifrelenmiş halini eklemen gerekiyor.

4. Startup.cs içerisinde alttaki kodu ekleyerek ilgili kütüphanenin middleware katmanında projeye tanıtılma işlemini yapıyor olmamız gerekecek.

    public void ConfigureServices(IServiceCollection services)

    {

        services.AddControllersWithViews();
        services.AddDataProtection();

    }


5. Şifreninin Şifresini Almak için alttaki kodlar kullanılıp 2nolu basamaktaki EncryptedPassword alanına eklememiz gerek. 

 public class HomeController : Controller

 {

     private readonly ILogger<HomeController> _logger;

     private readonly IDataProtector _protector;

     private readonly IConfiguration _config;

     public HomeController(ILogger<HomeController> logger, IDataProtectionProvider protector,IConfiguration configuration)

     {

         _logger = logger;
         _protector = protector.CreateProtector("MySecretPurpose");
         _config = configuration;

     }

     public IActionResult Index()

     {
         var encrypted = _protector.Protect("sifre123");
         return View();
     }

6. işlem sonucunda elde ettiğimiz şifrelenmiş şifre "CfDJ8BtApkD7hSdMtfe5D8CdXY1Re-hol1m-4Ay4AH0q76UQ_UrNsVwhnp8eAqOnH8MFeBFB9ZFPSrp-mmG4p8G3qRhu5b7LpPmipBaw1emW8FX1FmNAUtpiU4aC5ffdfLc3Bg" şeklindeydi. Bunu da alttaki şekilde appsettings.json içerisine ekledim.

  "Secrets": {

    "EncryptedPassword": "CfDJ8BtApkD7hSdMtfe5D8CdXY1Re-hol1m-4Ay4AH0q76UQ_UrNsVwhnp8eAqOnH8MFeBFB9ZFPSrp-mmG4p8G3qRhu5b7LpPmipBaw1emW8FX1FmNAUtpiU4aC5ffdfLc3Bg"

  }


7. Şifrelenmiş şifreyi çözmek için ise alttaki gibi bir kod yazmak yeterli olacaktır.

  var encrypted = _config["Secrets:EncryptedPassword"];

  var decrypted = _protector.Unprotect(encrypted);


Artık şifrelenmiş verimizden orjinal şifreye ulaşmış olduk. Burada bir ara kod yazarak şifrelenme sürecini o kütüphane üzerinden anlık yapabiliriz.  


Şifrelerinizi koruyun :) 







 


14 Mart 2023 Salı

Asp.net core Projelerinde User Formunun Validationlarının Tanımlanması

User classı :


 public class User

{

    [Required(ErrorMessage = "Ad alanı boş olamaz.")]

    public string FirstName { get; set; }


    [Required(ErrorMessage = "Soyad alanı boş olamaz.")]

    public string LastName { get; set; }


    [Required(ErrorMessage = "E-posta alanı boş olamaz.")]

    [EmailAddress(ErrorMessage = "Geçerli bir e-posta adresi girin.")]

    public string Email { get; set; }


    [Range(18, 99, ErrorMessage = "Yaş aralığı 18 ile 99 arasında olmalıdır.")]

    public int Age { get; set; }

}



HomeController tarafı 

 public IActionResult CreateUser()

 {

     return View();

 }


 [HttpPost]

 public IActionResult CreateUser(User user)

 {

     if (!ModelState.IsValid)

     {

         return View(user);

     }


     // Doğrulama başarılı, kullanıcıyı kaydet

     // ...


     return RedirectToAction("Index");

 }


View tarafı 

@model User


@using (Html.BeginForm("CreateUser", "Home"))

{

    <div>

        <label for="FirstName">Ad:</label>

        @Html.TextBoxFor(model => model.FirstName)

        @Html.ValidationMessageFor(model => model.FirstName)

    </div>

    

    <div>

        <label for="LastName">Soyad:</label>

        @Html.TextBoxFor(model => model.LastName)

        @Html.ValidationMessageFor(model => model.LastName)

    </div>

    

    <div>

        <label for="Email">E-posta:</label>

        @Html.TextBoxFor(model => model.Email)

        @Html.ValidationMessageFor(model => model.Email)

    </div>

    

    <div>

        <label for="Age">Yaş:</label>

        @Html.TextBoxFor(model => model.Age)

        @Html.ValidationMessageFor(model => model.Age)

    </div>

    

    <div>

        <input type="submit" value="Kaydet" />

    </div>

}



11 Şubat 2023 Cumartesi

Visual Studio 2022 Kurulumu

 Merhaba Arkadaşlar,


Visual Studio bizler için etkin kod yazmayı sağlayan bir kod geliştirme ortamıdır.
İçerisinde farklı dilleri yazmamıza imkan tanımaktadır. Bu diller C#, C, C++, F# (Fonksiyonel Programlama), Pyhton vb. gibi dillerdir.

Visual Studio'nun çeşitli versiyonları var hangisini kullanmalıyım?
Visual Studio Community olan versiyonu bireysel developerlar için yeterli olacaktır. Enterprise olan sürümü daha çok kurumsal firmalar tarafından kullanılmaktadır. Bu versiyonu indirmeniz durumunda bir ayın sonunda sizden bir key girmenizi isteyecektir. Bu key bilgisini girmeniz durumunda programı kullanabilirsiniz.

Eğitimler ve bireysel çalışmalarımız için Visual Studio Community versiyonunu indirip kurabilirsiniz.

Nasıl İndiririm?
Visual Studio Community 2022 İndirmek için buraya tıklayınız.

Bilgisayarınıza indirilmiş olan .exe uzantılı dosyayı çalıştırmanız durumunda online olarak kurulum gerçekleşecektir. Kurulum esnasında internet bağlantınızın olması önemlidir. Bağlantınız ne kadar hızlıysa kurulumu o kadar hızlı tamamlayacaktır.






25 Temmuz 2022 Pazartesi

Entity Framework Nedir?

 Entity Framework ile uygulama geliştirme aşamasında aşağıdaki yaklaşımlardan birisini kullanabiliriz. Bu yaklaşımlar:

  1. Database First
  2. Model First
  3. Code First



Database First 

Eğer hali hazırda bir veri tabanımız varsa ve bu veri tabanı uzun zamandır kullanılıyorsa bu yaklaşım tercih edilir. Bununla çalışabilmek için veri tabanını klasik yöntemlere göre SQL Server üzerinden oluşturmalısınız. (kodla ya da arayüzden)

Bu yöntemde veri tabanı üzerinde herhangi bir değişiklik yapmak istersek, SQL Server üzerinden yapmalıyız. Bu durumun projeye tarafına aktarılması için “update model from database” demek gerekir.

Model First

Eğer bir veri tabanına sahip değilseniz, direk visual studio üzerinden model kullanarak oluşturabilirsiniz. Burada gerçekleştirdiğimiz değişiklikleri SQL’e tanıtmak için “generate database from” tıklamamız gerekir. Eğer kod ya da SQL yazmayı sevmiyorsanız, bu yöntemi tercih edebilirsiniz. Bu yöntemde genellikle kodlama yerine design yaparız. 
Projeniz çok sayıda tablo içeriyor ve kompleks bir yapıya sahipse bu yöntem kullanışlı olacaktır. Büyük çaplı kurumsal projelerde tercih edilebilir.

Code First

Eğer kodlama yapmayı çok seviyorsanız ve veri tabanımı kodlama ile oluşturmak istiyorum diyorsanız bu yöntem size göre. Bu yöntemde design yapmak yerine kodlama yapıyorsunuz. Bu yaklaşım ile tüm kontrol elinizde oluyor, diğer yaklaşımlardaki gibi arka tarafta otomatik kodlar üretilmiyor. Yazmış olduğunuz kodlar veri tabanını ve tablolarınızı oluşturacaktır. Tablo sayısı az olan projelerde kullanılması tercih ediliyor.























Code First Örneği  (Migrations) :

https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/

https://www.slideshare.net/jibranrasheed/learn-entity-framework-in-a-day-with-code-first-model-first-and-database-first?qid=5e47d6ca-eaf2-4240-a05b-31ccf5276fcd&v=&b=&from_search=8


Migration Nedir?

İngilizcede doğrudan kelime anlamı göç, yani şöyle düşünün benim buradaki bilgilerim, kurallarım veritabanına göç ediyor. Böyle hayal edin, tasvir doğru mu oldu bilemiyorum ama uygun gibi. Tam olarak yapılan da bu, uygulamamda dediğim kurallar, model classlar, bağıntıları migration ile anlatıyorum.

Migration 3 adımlı bir işlemdir.

  1. Öncelikle model oluşturur veya modellerimizde değişiklik yaparız. Bu noktada yeni bir model oluşturmuş olabilirsiniz veya var olan modellerinizde değişiklik yapmış olabilirsiniz. Böyle bir işlem yaptığınızda mutlaka migration ile database tarafına değişiklik yansıtılmalıdır.
  2. Migration Ekleme işlemi yaparız. Database tarafına değişikliği yansıtabilmek için migration ekleriz. add-migration MigrationAdı
  3. Migration uygulama işlemi yaparız. Migration uygulamamıza bir isimle eklenince, henüz işlem database yansıdı demek değildir bunu database’e yansıtabilmek için migration’u database’e push etmemiz gerekir. update-database



















18 Mayıs 2022 Çarşamba

Github Desktop Kullanarak GitHub Web Sitesine Proje Nasıl Yüklenir?

Merhabalar,

Kendi bilgisayarımızda oluşturmuş olduğumuz projemizi github web sitesinde barındırmak için aşağıdaki adımları izleyelim.


1. Github hesabı açalım.

2.Github Desktop uygulamasını buradan indirelim ve bilgisayarımıza kuralım.

3. 1 numarada açmış olduğumuz hesap bilgilerini kullanarak github desktop'a giriş yapalım.


















4. Projemizi barındıracak yeni bir repo seçelim. 
















5. Projemizin adını, açıklamasını, kaydedeceği dosyanın yolunu, readme dosyasını ve license bilgisini seçelim. 

















6 .Github Desktop tarafında gelen ana ekranda publish repository dersek eğer github websitesi üzerinde böyle bir folder açacak. 


7. Github web sitesine gidip bakarsak aşağıdaki gibi bir yapı oluşturduğunu görebiliriz.















8. Github tarafında açılan yapının görünümü aşağıdaki gibi olacaktır, içerisinde readme dökümanının olduğunu görebilirsiniz. 
















9. Bu aşamada bilgisayar tarafında da bir folder oluşturur ve içine aşağıdaki gibi proje dosyalarını yüklememiz gerekecek.













10 .  Github desktop üzerinden bu klasördeki değişiklikleri github web sitesine göndereceğiz. 






















Son olarak github desktop da push origin diyerek o değişiklikleri göndermesini söylüyoruz. 


Kontrol amaçlı github web sitesine girip bakarsak eğer,  aşağıdaki gibi kodların oraya da eklendiğini görmüş oluruz. 




İyi Çalışmalar :) 






6 Nisan 2022 Çarşamba

C# Çalışma Soruları

1′den 100′e kadar olan sayıların toplamını bulup sonucu ekranda gösteren C# programını yazın.

Girilen iki sayını arasındaki sayıların toplamını bulan C# programını yazın.

İstenilen Sayıyı 10 kez yazdıran C# programını yazın.

0-100 arasındaki tek sayıları yazdıran C# programını yazın.

1 ile 100 Arasındaki Sayıların Toplamının Ortalaması

100 ile 200 Arasındaki çift sayıların toplamının ortalaması bulan C# programını yazın.

A’dan Z’ye kadar olan karakterleri ekrana yazdıran C# programını yazın.

İstenilen sayı kadar girilen sayıların ortalamasını C# programını yazın.

1 ile 100 arasındaki tek ve çift sayıların toplamını bulup sonucu ekranda gösteren programın kodlarını yazalım.

1 ile 100 arasındaki tek ve çift sayıların toplamını bulup sonucu ekranda gösteren programın kodlarını yazalım. 

1 ile 10 arasındaki tek sayıları ekrana alt alta While döngüsü ile yazdıran C# programını yazınız.

Kullanıcı tarafından girilen bir sayının kaç basamaklı olduğunu bulup ekrana yazdıran C# programını While döngüsü kullanarak yazınız.

1 ile 10 arasındaki tek sayıları ekrana alt alta While döngüsü ile yazdıran C# programını yazınız.

Kullanıcıdan devam etmek istiyor musunuz sorusuna alınan yanıta göre sayı alıp alınan sayıların toplamını bulan programı yazınız. (Evet “E” veya Hayır “H”)

Kullanıcı tarafından girilen gün adının haftanın kaçıncı günü olduğunu bulan c# console uygulaması

C# Console uygulamasında Elemanları kullanıcı tarafından dışarıdan girilen 10 elemanlı bir dizinin elemanlarını %20 arttıran ve ekrana yazdıran örnek:

Elemanları kullanıcı tarafından girilen 10 elemanlı string bir dizide, en uzun metni, en uzun metnin karakter sayısını ve en uzun metnin index numarasını bulan ve ekrana yazdıran örnek

20 elemanlı dizi içerisine for döngüsü ile rasgele 1-100 arası sayılar atarak ekranda görüntüleyen program:

100 elemanlı bir dizide negatif ve pozitif eleman sayısını bulan ve ekranda gösteren C# kodları.


Session Nedir? Neden İhtiyacım Var?

HTTP nedir? HTTP, yani Hypertext Transfer Protocol , web tarayıcıları ile web sunucuları arasında veri alışverişini sağlayan internetin t...