Kategori arşivi: ASP.NET

ASP.NET Web API 2’de İsteklere İzin Verme

Tarayıcı güvenliği için bir web sayfasıdan başka bir web sayfasına AJAX isteklerini engeller. Bu hassas verilerin korunmasını sağlar. Bazen de API çağrılarına izin vermek isteyebilirsiniz.

İzin vermek için W3C standartı olan CORS kullanırız. CORS bize istek yapanları, metodları ve headerları filtrelememize olanak verir.

İlk önce NuGet ile CORS paketini projemize dahil ediyoruz. Benim kullandığım 5.2.6 versiyonudur.

WebApiConfig.cs dosyasında global bir denetleme yapacaksak Global.asax dosyasımızda aşağıdaki satırın ekli olduğundan emin oluyoruz.

CORS global olarak etkinleştirmek istiyorsanız, WebApiConfig.cs dosyamızda aşağıdaki satırları ekliyoruz.

CORS Attribute dikkat ederseniz size üç filtre sunmaktadır. Yukarıdaki örnekteki gibi origins, headers ve methods değerleri belirtebilir veya joker karakteri (*) ile her şeye izin verebilirsiniz.

CORS global olarak izin verebileceğiniz gibi Controller veya Method seviyesinde de izin verebilirsiniz.

Burada unutmamız gereken iki nokta var.

  1. Controller veya method seviyesinde uyguladığımız CORS, Global olarak uyguladığımız CORS’u geçersiz kılar.
  2. Web.Config’de de CORS için ayar bulunmamalıdır. Biz projemizde bu maddede çok sıkıntı çekmiştik 🙂

 

Facebooktwittergoogle_plusredditpinterestlinkedin

Visual Studio Projelerinde Yüklenen NuGet Paketlerin Farklı Sürüm Problemi

NuGet severek kullandığım bir extension ama solationa eklediğiniz projeler arasında yüklediğiniz paketler arasında versiyon uyumsuzluğu olabilir. Bir de çok n-layered bir mimariniz varsa gözden kaçanlar da olabilir. Gözünüzden kaçarsa output penceresinde aşağıdaki gibi bir hatayı görebilirsiniz.

C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3277: Found conflicts between different versions of the same dependent assembly that could not be resolved. These reference conflicts are listed in the build log when log verbosity is set to detailed.

Paketler arasındaki bu uyumsuzluğu düzeltmek için, NuGet gerekli önlemi unutmamış 🙂 Solution üzerinde NuGet Paket Yönetimine girdiğinizde 4. bir sekme göreceksiniz. Bütün projelerinizi tarayıp, uyumsuz olan paketleri size göstermektedir.

Facebooktwittergoogle_plusredditpinterestlinkedin

string Tipinde Gelen Türkçe Tarihi DateTime Tipine Çevirmek

Araştırmak neredeyse yarım günümü alan bir sorunumu sizlerle paylaşmak istedim.

Üstünde çalıştığım projede, string tipinde gelen ve de formatı “dd MM yyyy DD” tarihi DateTime tipine çevirmem gerekiyordu. Tipini değiştirmem için Parse fonksiyonunu kullanmam lazım ama tarihin culture bilgisi olmadan gelen tarihi algılaması mümkün olmuyor. Aşağıdaki gibi bir fonksiyon ile çözdüm.

 

Facebooktwittergoogle_plusredditpinterestlinkedin

MVC Model’inde Nesneyi Validasyon Haricinde Tutmak

Model tasarımında nesnelerinizde validasyonu zorunlu tutabilirsiniz ama form işlemlerinde istediğiniz alanları ModelState Validate kontrolü haricinde tutmak istiyorsanız aşağıdaki örneği inceleyebilirsiniz.

Facebooktwittergoogle_plusredditpinterestlinkedin

ASP.NET MVC’de HTML5 data-* Attributes Kullanımı

MVC’de form controlleri eklerken HMTL5 attributes kullanmak isteyebilirsiniz ama data-* attributes’leri içindeki “-” aritmatik bir operatör olduğu için sayfanız hata verecektir. Proplemi aşmak için “_” çizgi kullanmanız yeterlidir.

Örnek:

Facebooktwittergoogle_plusredditpinterestlinkedin

ASP.NET MVC ile Post Edilen Html Kodları (ValidateInput)

MVC ile hazırladığımız sayfalarda CKEditör gibi zengin metin editörü kullanıyorsak, sayfamızı post ettiğimizde aşağıdaki gibi hata alabiliriz.

“[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client…”

Bu hata aslında bir güvenlik önlemi olup, sayfada html ve js kodları yürütmeyi engellemektedir. Eğerki kontrol panelinizde kullanacaksanız metodunuzun üstüne [ValidateInput(false)] attribute belirtmeniz yeterli olacaktır.

Facebooktwittergoogle_plusredditpinterestlinkedin

MVC Model’deki Date Alanları Proplemi ve Çözümü

Sql Server’da oluşturduğunuz tablodaki date tipindeki alanlarının form kontrollerinde oluşan sorunu çözmek için aşağıdaki js kodunu kullanmanız yeterlidir.

Ayrıca eğer form elemanınızın kontrol edilmeden atlanmasını istiyorsanız class attribute “ignore” eklemeniz yeterlidir. Örnek

Facebooktwittergoogle_plusredditpinterestlinkedin

ASP.NET Cookie Türkçe Karakter Proplemi ve Çözümü

Üzerinde çalıştığım projede session ile yaptığım kısımları cookie olarak değiştirmem gerekiyordu. Düzenlemeden sonra cookielerden gelen değerlerde türkçe karakter problemi olduğu gördüm. Bu sorunu UrlEncode ile çözebilirsiniz ama yazılım sürecini uzatıyor. web.config ile daha kolay bir şekilde çözüme ulaşabilirsiniz.

Facebooktwittergoogle_plusredditpinterestlinkedin

Windows Azure Bölgesel Ayarlar

Üzerinde çalıştığım web servis projesini, azure servisinde çalıştırdığımda hata alıyordum. Hatayı yakaladıktan sonra anladım ki Türkçe para formatına göre yaptığım işlemlerden dolayı oluyormuş. Türkçe’de yüzdelik virgül ile ayrılıyor sonuçta 🙂

Çözüm ise;

Facebooktwittergoogle_plusredditpinterestlinkedin

Çok Katmanlı Mimari (NLayered)

MVC’ye geçiş yaptığım dönemden bu yana Model, View ve Controller katmanları gördükçe kodlarım nedense bana çok karmaşık gelmeye başladı. Kendi kuruntum herhalde dedim ama biraz araştırma yaptıktan sonra analar ne developer doğuruyor demekten kendimi alamadım 🙂

Çok katmanlı mimarı hakkında Microsoft’un best practicelerini incelemenizi tavsiye ederim. Veritabanı işlemleri yapıldığı DAL (Data Access Layer), arayüz ile veritabanı arasındaki işleri yapan BLL (Business Logic Layer) katmanlar hakkında http://msdn.microsoft.com/en-us/library/aa581776.aspx (DAL) ve http://msdn.microsoft.com/en-us/library/aa581779.aspx (BLL) sayfalarını incelemenizi tavsiye ederim.

Bunlar haricinde katmanlar arası veri akışı sağlayabileceğiniz Entities, kendi helperlarınızı tutabileceğiniz Utilities ve verilerinizi dışarıya açmak için Service katmanlarıda oluşturabilirsiniz.

Bu mimari uygulama sürecin uzatsada yapınız mükemmel şekilde hiyerarşik ve modüler hale geliyor. Hele ki takım çalışması olan uygulamalarınız için size kolaylıklar sunuyor.

Katmanlı mimariyi anladıktan sonra, kendimi biraz daha Yazılım Geliştirici olduğumu hissetmeye başladım 🙂

Facebooktwittergoogle_plusredditpinterestlinkedin