WebHelpers - Aspnet Mvc Web Helpers

WebHelpers - Aspnet Mvc Web Helpers

Boş bir MVC si proje açıp Microsoft.AspNet.WebHelpers yüklüyoruz.
Yükleyip çalıştırdığınızda hata alıyorsanız Nugettan WebPages.Data update etmeniz gerekecektir.

AntiForgery ile Güvenlik

Güvenlik ile alakalı bir bileşendir. Sayfamızın GET işlemini açmadan AJAX , Url vs gibi işlemleri ile POST işlemini engellememize olanak sağlamaktadır.
AntiForgery diye bir kontroller açıp  burada aşağıdaki işlemleri yapınız.
Test Action dan silmek istediğimiz Id si silebiliriz @Html.AntiForgeryToken() sayesinde lakin
FakeTest içerisinde POST işlemine izin vermeyecektir.
the required anti-forgery form field __requestverificationtoken is not present
hatasını verdiğini göreceksiniz.

       public ActionResult Test()
        {
            return View(VeriTabani.veriler);
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Test(int id)
        {
            VeriTabani.veriler.RemoveAt(id);

            return RedirectToAction("Test");
        }

        public ActionResult FakeTest()
        {
            return View(VeriTabani.veriler);

        }


FakeTest.cshtml
@{
    ViewBag.Title = "FakeTest";
}
<h2>Fake Test</h2>

<div class="row">
    @using (Html.BeginForm("Test", "AntiForgery", FormMethod.Post))
    {
        <strong>İndex : </strong>
        @Html.TextBox("id", "", new { @class = "form-control" })
        <button class="btn btn-danger" type="submit">Gönder</button>
    }
</div>

Test.cshtml

@model List<string>
@{
    ViewBag.Title = "Test";
}

<h2>Anti Forgery Token</h2>
<hr />
<div class="row">
    <ul class="list-group">
        @foreach (string item in Model)
        {
            <li class="list-group-item" >
                @item
            </li>
        }
    </ul>
</div>

<div class="row">
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken() 

        <strong>İndex : </strong>
        @Html.TextBox("id","",new { @class="form-control"})
        <button class="btn btn-danger" type="submit">Gönder</button>
    }
</div>

VeriTabani.cs
  public static class VeriTabani
    {
        public static List<string> veriler = new List<string>(new string[] { "Oktay", "Okan", "Mehmet", "Hüso" });
    }


Chart(Grafik) Oluşturma

AspNet Mvc de Chart(Grafik) Oluşturma işlemi raporlama sayfaları başta olmak üzere bir çok işlem esnasında kullanılabilmektedir.  Nuget tan  Microsoft.AspNet.WebHelpers  install edip
Boş bir MVC projesi açarak bir örnek gerçekleştirelim.

Action işlemleri

        public ActionResult ChartGoster()
        {
            return View();
        }

        public ActionResult ChartOlustur(string tip="Column")
        {
            Chart chart = Chart.GetFromCache("chart1");

            if (chart==null)
            {
                chart = new Chart(300, 300);
                chart.AddTitle("MyCmputer - Ürün Satış Detay Grafiği");
                chart.AddLegend("Ürünler");
                chart.AddSeries(name: "Bilgisayar A", chartType: tip, xValue: new[] { 20, 40, 60 }, yValues: new[] { 800, 1200, 2300 });
                chart.AddSeries(name: "Bilgisayar B", chartType: tip, xValue: new[] { 20, 40, 60 }, yValues: new[] { 900, 1600, 3300 });

                string directory = Server.MapPath("~/charts/");

                if (Directory.Exists(directory) == false)
                {
                    Directory.CreateDirectory(directory);
                }

                string imagePath = directory + "chart1.jpeg";
                string xmlPath = directory + "chart1.xml";

                chart.Save(imagePath, format: "jpeg");
                chart.SaveXml(xmlPath);
                chart.SaveToCache("chart1", 1, true); // Cache ile resim Cache te varsa bir daha oluşturmuyoruz.
            }
           
            return View(chart);
        }

        public ActionResult ChartOlustur2(string tip = "Pie")
        {
            Chart chart = Chart.GetFromCache("chart2");

            if (chart == null)
            {
                chart = new Chart(300, 300);
                chart.AddTitle("MyCmputer - Ürün Satış Detay Grafiği");
                chart.AddLegend("Ürünler");
                chart.AddSeries(name: "Ürünler", chartType: tip, xValue: new[] { "Bilgisayar", "Mause", "Klavye" }, yValues: new[] { 100, 125, 200 });

                string directory = Server.MapPath("~/charts/");

                if (Directory.Exists(directory) == false)
                {
                    Directory.CreateDirectory(directory);
                }

                string imagePath = directory + "chart2.jpeg";
                string xmlPath = directory + "chart2.xml";

                chart.Save(imagePath, format: "jpeg");
                chart.SaveXml(xmlPath);
                chart.SaveToCache("chart1", 1, true); // Cache ile resim Cache te varsa bir daha oluşturmuyoruz.
            }

            return View("ChartOlustur",chart);
        }


ChartGoster.cshtml 

@using System.Web.Helpers
@{
    ViewBag.Title = "ChartGoster";
}

<h2>ChartGoster</h2>

<div class="row">
    <div class="col-sm-6">
        <img src="/MyChart/ChartOlustur?tip=Column" alt="Chart 1" />
    </div>
    <div class="col-sm-6">
        <img src="/MyChart/ChartOlustur2?tip=Pie" alt="Chart 2" />
    </div>   
</div>


ChartOlustur.cshtml

@using System.Web.Helpers
@model Chart
@{
    Layout = null;
}

@{
   
    Model.Write();

}



Crypto ile Şifreleme İşlemleri 

Şifreleme işlemi yapmak için kullanılmaktadır. Örneğin Şifre 123 ise DB de 123 olmaz bunu DB ye kaydederken şifrelenmiş versiyonunu tutarız.

Boş bir MVC projesi açıp sadece Controller tarafında işlem yapalım.


 public class MyCryptoController : Controller
    {
        // GET: MyCrypto


        private string sifresiz = "Oktay123";
        private string sifreli = "AI/2XEiy9/Pt/UpytC+7lFONKfF+JVyvHnBsoCFv+5rBefSFIe8ZHbGVB0QtouZ0qA=="; // sonuc ile aynı değer olmalı

        public ActionResult Index()
        {
            string salt = Crypto.GenerateSalt(); // random bir anahtar değer veriyor.

            string hash = Crypto.Hash(sifresiz); // Hash metodu verilen metni Hash liyo
            string sh1 = Crypto.SHA1(sifresiz); //  sh1 algoritmasına göre şifreliyor
            string sh256 = Crypto.SHA256(sifresiz); // Kuvvetli bir şifreleme yapıyor

            string sonuc = Crypto.HashPassword(sifresiz); // şifresiz metni şifreler    Şifre olarak DB ye bunu kaydederiz
            bool dogruMu = Crypto.VerifyHashedPassword(sifreli, sifresiz); // şifrelli bir metin ile şifresiz metni karşılaştırp eşleniyor mu eşlenmiyor mu kontrolu yapıyor.

            return View();
        }
    }


Kullanıcı şifresi DB de Hash lanmış şifre ile aynı ise dogruMu  == TRUE olacaktır ve kullanıcı Login yapabilecektir diyebiliriz.


WebImage ile Resim İşlemleri 

Sunucuda yer alan bir resmi sağa sola vs çevirmek isteyebiliriz. Bunun içinde WebHelper (Microsoft.AspNet.WebHelpers) işimizi görecektir.


  public class MyWebImageController : Controller
    {
        // GET: MyWebImage
        public string ImagePath
        {
            get { return Server.MapPath("~/images/oktayaltan.jpg"); }
        }
        public ActionResult Start(string cmd="Original")
        {
            ViewBag.cmd = cmd;
            return View();
        }
        public void Process(string p)
        {
            WebImage image = new WebImage(ImagePath);

            switch (p)
            {
                case "Original":
                    break;
                case "RotateLeft":
                    image.RotateLeft();
                    break;
                case "RotateRight":
                    image.RotateRight();
                    break;
                case "FlipHorizontal":
                    image.FlipHorizontal();
                    break;
                case "FlipVertical":
                    image.FlipVertical();
                    break;
                case "Resize":
                    image.Resize(image.Width/2,image.Height/2,preserveAspectRatio:true);
                    break;
                case "AddTextWatermark":
                    image.AddTextWatermark("Oktay ALTAN",fontColor:"Red",fontSize:14,horizontalAlign:"Center",verticalAlign:"Bottom");

                    break;
                case "AddImageWatermark":
                    WebImage watermark = new WebImage(ImagePath);
                    watermark.Resize(50,50);
                    watermark = watermark.Save(Server.MapPath("~/images/oktayaltan.jpg"),imageFormat:"jpg");

                    image.AddImageWatermark(watermark.FileName,50,50,verticalAlign:"Top");
                    break;
                default:
                    break;
            }
            string savePath = Server.MapPath("~/images/last.jpg");
            //WebImage savedImage= image.Save(savePath,imageFormat:"jpg");
            

            image.Write();
        }
    }




View Kısmı : 
Start.cshtml 

@{
    ViewBag.Title = "Start";
}

<h2>Start</h2>

<div class="row">
    <div class="col-sm-6">
        <strong>Kaynak</strong> <br />

        <img src="/MyWebImage/Process?p=Original" />
    </div>

    <div class="col-sm-6">
        <strong>Hedef</strong>
        <img src="/MyWebImage/Process?p=@ViewBag.cmd" />

    </div>
    
</div>

<div class="row">
    <div class="col-sm-12">
        <hr />
    </div>
    <div class="col-sm-6">
        <a href="/MyWebImage/Start?cmd=Original" class="btn btn-success">Original</a>
        <a href="/MyWebImage/Start?cmd=RotateLeft" class="btn btn-success">RotateLeft</a>
        <a href="/MyWebImage/Start?cmd=RotateRight" class="btn btn-success">RotateRight</a>
        <a href="/MyWebImage/Start?cmd=FlipHorizontal" class="btn btn-success">FlipHorizontal</a>
        <a href="/MyWebImage/Start?cmd=FlipVertical" class="btn btn-success">FlipVertical</a>
        <a href="/MyWebImage/Start?cmd=Resize" class="btn btn-success">Resize</a>
        <a href="/MyWebImage/Start?cmd=AddTextWatermark" class="btn btn-success">AddTextWatermark</a>
        <a href="/MyWebImage/Start?cmd=AddImageWatermark" class="btn btn-success">AddImageWatermark</a>
    </div>

</div>


WebCache ile Performans  

Cache ile web sitemizde çok az değişen yapıları tutarak çok ciddi performans artışı sağlayabiliriz.

public class MyWebCacheController : Controller
    {
        // GET: MyWebCache
        public ActionResult Index()
        {
            string time = WebCache.Get("zaman");

            if (String.IsNullOrEmpty(time))
            {
                time = DateTime.Now.ToString();
                WebCache.Set(key:"zaman",value:time,minutesToCache:1,slidingExpiration:true);
            }

            ViewBag.simdi = time;
            return View();
        }

        public ActionResult RemoveCache()
        {
            WebCache.Remove("zaman");
            return RedirectToAction("Index");
        }
    }



WebMail ile E-Posta İşlemleri

Web Mail ile Mail göndermek için işlemimizi test olması açısından gmail üzerinden gerçekleştireceğiz.
Öncelikle   https://myaccount.google.com/lesssecureapps?pli=1  adresinden
Erişime İzin ver i AÇIK yaparak mail gönderebilmemize izin vereceğiz.
Şayet bu izni vermezseniz

SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şöyleydi: 5.5.1 Authentication Required. Learn more at

Bu hata yı alırız. (Yada Kullanıcı Adı Şifreyi yanlış girerseniz bu hatayı alırsınız.)







Kodlama işlemine geçelim

 public ActionResult Index()
        {
            bool sonuc = false;


           
         
            WebMail.SmtpServer = "smtp.gmail.com";
            WebMail.SmtpPort = 587;
            WebMail.UserName = "Gönderen Mail Adresi";
            WebMail.Password = "Gönderen Mail Adresi Şifresi";

            WebMail.EnableSsl = true;
         
            string file= Server.MapPath("~/images/resim.jpg");
           
            try
            {
                WebMail.Send(
                    to: "Gönderilecek Mail Adresi",
                    subject:"Web Mail Test",
                    body: "Bu Bir Mail Denemesidir <br><b>Dikkate Almayın</b>",
                    replyTo: "dont-reply@gmail.com", isBodyHtml: true,
                    filesToAttach: new[] { file });
                sonuc = true;
            }
            catch (Exception ex)
            {

                ViewBag.hata = ex.Message;
            }
            ViewBag.sonuc = sonuc;


            return View();
        }

Index.cshtml

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@if (ViewBag.sonuc==true)
{
    <div class="text-success">
        <span class="glyphicon glyphicon-ok"></span>
        E-Posta Gönderilmiştir.
    </div>
}
else
{
    <div class="text-danger">
        <span class="glyphicon glyphicon-ok"></span>
        @ViewBag.hata
    </div>
}


WebGrid ile Hazır Grid Sistemi

WebGrid sınıfı ile verileri tablo şeklinde görüntüleyebilmekteyiz.
Otomatik sıralama, sayfalama gibi işlemleri yapmaktadır.
Öncelikle bir kitap listemiz olsun ve bu kitap bilgilerini listeleyeceğimiz bir Grid nesnes oluşturalım.
Kitap calss ını açıyoruz. (Nuget ten FakeData install ediniz)

namespace MvcWebHelpers.Models
{
    public class Kitap
    {
        public static List<Kitap> Kitaplar { get; set; }

        public Guid Id { get; set; }
        public string Adi { get; set; }
        public string Yazar { get; set; }
        public DateTime YayinTarihi { get; set; }
        public decimal Fiyat { get; set; }

        protected Kitap() { }

        public static void GenerateFakeData(int count)
        {
            if (Kitaplar==null)
            {
                Kitaplar = GetFakeData(count);
            }
        }

        private static List<Kitap> GetFakeData(int count)
        {
            List<Kitap> kitaplar = new List<Kitap>();

            for (int i = 0; i < count; i++)
            {
                kitaplar.Add(new Kitap() {
                    Id=Guid.NewGuid(),
                    Adi=FakeData.NameData.GetCompanyName(),
                    Yazar = FakeData.NameData.GetFullName(),
                    Fiyat = FakeData.NumberData.GetNumber(10,33),
                    YayinTarihi=FakeData.DateTimeData.GetDatetime(DateTime.Now.AddYears(2),DateTime.Now)


                });
            }

            return kitaplar;
        }
    }
}


Controller


    public class MyWebGridController : Controller
    {
        // GET: MyWebGrid
        public ActionResult Index()
        {
            Kitap.GenerateFakeData(50);


            return View(Kitap.Kitaplar);
        }

    }

View 

@using MvcWebHelpers.Models
@using System.Web.Helpers
@model List<Kitap>
@{
    ViewBag.Title = "Index";
}

@{
        WebGrid grid = new WebGrid(
            source: Model,
            columnNames: new[] {"Adi", "Yazar", "YayinTarihi", "Fiyat" },
            defaultSort: "Adi",
            rowsPerPage: 8,
            canPage: true,
            canSort: true,
            pageFieldName: "sayfaNo",
            sortFieldName: "sirali",
            sortDirectionFieldName: "yon" );
}

<h2>Kitaplar</h2>

<hr />

<div class="row">
    <div class="col-md-12">
        @grid.GetHtml(
       caption:"Kitap Listesi",
       fillEmptyRows:false,
       displayHeader:true,
       mode:WebGridPagerModes.All,
       numericLinksCount:3,
       firstText:"[ilk]",
       lastText:"[son]",
       previousText:"[önceki]",
       nextText:"[sonraki]",
       htmlAttributes:new { id="mytable"}

       )
    </div>

</div>


Hiç yorum yok:

Yorum Gönder