İçeriğe geç

Vue.js’ten C# REST API’ye Veri Aktarımı: v-model ile İki Yönlü Bağlama

Şimdi bu ‘v-model’ olayı var ya, Vue.js kullanmaya başlayınca hemen karşına çıkacak ilk şeylerden biri. Hani böyle ‘Aa, ne güzelmiş!’ dediğin cinsten. Benim de ilk başlarda böyle bir hayranlığım vardı tabii. Neyse efendim, konuya girelim bakalım.

Vue.js’te v-model dediğimiz şey, aslında iki yönlü veri bağlama için kullanılan sihirli bir araç gibi düşünebilirsin. Yani ne demek bu? Şöyle ki, sen bir input alanına (mesela bir metin kutusu) bir şey yazdığında, bu yazdığın şey Vue component’indeki bir veriyle otomatik olarak güncelleniyor. Tam tersi de geçerli; eğer component’taki veriyi programatik olarak değiştirirsen, input alanındaki yazı da ona göre değişiyor. Ne güzel değil mi?

Bu aslında web geliştirirken hayat kurtaran bir özellik. Eskiden JavaScript ile bunu yapmak için bayağı uğraşmak gerekirdi. Her input’un ‘change’ olayını dinle, bir fonksiyon yaz, veriyi güncelle, sonra veriyi tekrar input’a ata falan filan… Epey zahmetliydi yani. Ama v-model ile bunlar tek satırda halloluyor.

Mesela bir kullanıcı kayıt formu yaptığını düşün. Adı, soyadı, e-posta gibi alanlar olacak. Her birini v-model ile component’taki ilgili veri alanlarına bağlıyorsun. Kullanıcı adı alanına bir şey yazdığında, component’taki `username` değişkeni anında güncelleniyor. Ya da bir butona basıp `username` değişkenini ‘Misafir’ yaparsan, o anda ekranda görünen kullanıcı adı da ‘Misafir’ oluyor. İnanılmaz pratik.

Tabi bu her şey için geçerli değil. Sadece form elemanları için değil, Vue’nun özel component’ları için de kullanılabiliyor. Ama en yaygın kullanımı input, textarea ve select gibi temel HTML form elemanlarında. Bu arada, v-model aslında syntax sugar yani daha kısa bir yazım şekli. Arka planda component’taki veriyi güncelleyen bir ‘input’ event’i ve bu veriyi ekrana basan bir ‘value’ prop’u var aslında. Ama biz bunu v-model ile tek satırda halletmiş oluyoruz.

Şimdi gelelim işin biraz daha teknik kısmına, yani bunu bir C# REST API’ye veri gönderirken nasıl kullanacağız? Hani bazen Vue tarafında bir şeyler topluyorsun, sonra bunları bir yere kaydetmek istiyorsun, değil mi? İşte o zaman bu topladığın veriyi server’a göndermen gerekiyor. Vue’da topladığın veriyi bir JavaScript objesi olarak bir array’e koyarsın, sonra bu array’i `fetch` veya `axios` gibi bir kütüphane ile POST isteği olarak API’ye gönderirsin. Bu arada, `axios` kullanmak genelde daha rahat oluyor, promise tabanlı olması falan derken daha şık bir kullanımı var sanırım.

Peki, C# tarafında bu veriyi nasıl alacağız? REST API’mizde bir controller’ımız olacak tabii ki. Bu controller’da, Vue’dan gelen veriyi karşılayacak bir metot yazacağız. Bu metot genellikle POST isteği alacak ve parametre olarak da Vue’dan gönderdiğimiz veri yapısına uygun bir C# modeli bekleyecek. Yani Vue’da yolladığın `username`, `email` gibi alanlar varsa, C# tarafında da aynı isimlerde property’lere sahip bir sınıfın olması lazım. Dapper gibi ORM’ler kullanıyorsan, bu modeli direkt PostgreSQL veya MySQL veritabanına kaydedebilirsin. Çok fazla zaman harcamadan, hızlıca veri aktarımı sağlamış olursun.

Şimdi size basit bir kod örneği göstereyim. Bu örnekte, Vue tarafında bir input’u v-model ile bir değişkene bağlıyoruz ve bir butona basınca bu değeri bir POST isteğiyle basit bir C# API’ye gönderiyoruz. API tarafında da bu isteği alan bir controller metodu olacak. Basit ama mantığı anlamak için yeterli diye düşünüyorum.

İlk olarak Vue tarafı:

<template>   <div>     <input type="text" v-model="mesaj" placeholder="Bir şeyler yaz...">     <button @click="gonder">Gönder</button>     <p>Yazdığın: {{ mesaj }}</p>   </div> </template>

<script> import axios from 'axios';

export default { data() { return { mesaj: '', }; }, methods: { async gonder() { try { const response = await axios.post('https://localhost:7001/api/veri', { icerik: this.mesaj, }); console.log('Başarılı:', response.data); alert('Veri başarıyla gönderildi!'); } catch (error) { console.error('Hata oluştu:', error); alert('Veri gönderilirken hata oluştu.'); } }, }, </script>

Şimdi de C# tarafında basit bir controller örneği. Bunu bir ASP.NET Core projesinde kullanabilirsin. Bu arada, localhost üzerindeki port numarası sizde farklı olabilir, ona dikkat edin. Benim kullandığım port 7001, sizde 5001 veya başka bir şey olabilir sanırım.

Öncelikle, Vue’dan gelen veriyi alacak bir modelimiz olsun:

// Models/VeriModel.cs public class VeriModel {     public string Icerik { get; set; } }

Ve şimdi controller:

// Controllers/VeriController.cs using Microsoft.AspNetCore.Mvc;

[ApiController] [Route("api/[controller]")] public class VeriController : ControllerBase { [HttpPost] public IActionResult PostVeri([FromBody] VeriModel veri) { if (veri == null || string.IsNullOrEmpty(veri.Icerik)) { return BadRequest("Geçersiz veri."); }

// Burada veriyi veritabanına kaydedebilirsin // Örneğin Dapper ile: // _dbConnection.Execute("INSERT INTO Mesajlar (Icerik) VALUES (@Icerik)", new { veri.Icerik });

Console.WriteLine($"Alınan Mesaj: {veri.Icerik}"); // Konsola yazdır, loglama yapabilirsin

return Ok(new { message = "Veri başarıyla alındı!", alinanIcerik = veri.Icerik }); } }

Burada `PostVeri` metodu, Vue’dan gelen `icerik` bilgisini `VeriModel` objesi olarak alıyor. Eğer veri doluysa, konsola yazdırıyor ve başarılı bir cevap dönüyor. Gerçek bir projede bu kısmı veritabanına kaydetme işlemiyle değiştirirsin tabii ki. Hani böyle basit bir `INSERT` sorgusu falan.

Bu arada, bu basit örnek sadece veriyi almayı gösteriyor. Gerçek bir senaryoda CORS (Cross-Origin Resource Sharing) ayarlarını da yapman gerekecek ki Vue uygulaman (genellikle farklı bir portta çalışır) API’ye istek atabilsin. Yoksa tarayıcı güvenlik nedeniyle bu isteği engeller. Bunu ASP.NET Core’da `Startup.cs` dosyasında veya `Program.cs`’te ayarlayabiliyorsun.

Neticede, v-model ile iki yönlü veri bağlama, Vue.js’te kullanıcı arayüzü geliştirmeyi çok kolaylaştırıyor. Bunu bir C# REST API ile birleştirdiğinde ise interaktif ve veri odaklı uygulamalar geliştirmek çok daha akıcı hale geliyor. Yani hem ön yüzde hem de arka yüzde işleri hızlandıran bir kombinasyon diyebiliriz. İnanın ki, bu iki teknolojiyi birlikte kullanmak işinizi çok kolaylaştıracaktır.

Eğer bu konu hakkında daha fazla detay istersen, Google’da v-model tutorial diye aratabilirsin, birçok kaynak çıkacaktır. Ya da belki YouTube’da da güzel anlatımlar bulabilirsin. Ben de zamanında oralardan öğrenmiştim sanırım.

Bu arada, Vue’nun yeni versiyonlarında `v-model`’in kullanımı biraz daha esnekleşti galiba. Ama temel mantık aynı. Yani sen şimdi bu temelini anladın mı, gerisi çorap söküğü gibi gelir. Önemli olan o iki yönlü bağlantının nasıl kurulduğunu kavramak.

Yani sonuç olarak, v-model sadece bir özellik değil, Vue ekosisteminin temel taşlarından biri. Bunu doğru anlamak, daha etkili ve performanslı arayüzler geliştirmenin anahtarı.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.