Kategori arşivi: C#

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.

Okumaya devam et

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.

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.

public static DateTime StrLongDateToDateTime(string date)
            {
                DateTime dateTime = new DateTime();
#if DEBUG
                try
                {
#endif
                    if (!string.IsNullOrEmpty(date))
                    {
                        string myTime = DateTime.Parse(date).ToString(CultureInfo.GetCultureInfo("tr-TR").DateTimeFormat.ShortDatePattern);
                        dateTime = DateTime.Parse(myTime);
                    }
#if DEBUG
                }
                catch (Exception ex)
                {
                    Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                }
#endif
                return dateTime;
            }

 

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:

@Html.TextBoxFor(model => model.MAIL, new { @class = "form-control", @placeholder = "mail@alanadi.com", @data_required = "email" })

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.

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.





Html.BeginForm’u Post Sonrasında Js ve JQuery İşlemleri

Üzerinde çalıştığım projemde dosya yükleme eklemem gerekiyordu. Bütün view’lerimde Ajax.BeginForm ile post ediyordum ve post sonrası js işlemleri için parametre olak OnSuccess kullanıyordum. Upload işlemini Html.BeginForm ile yapmak zorunda kalınca OnSuccess’den mahrum kaldım.

Html.BeginForm ile post sonrasında js kütüphanelerimi aşağıdaki gibi bir yöntemle çalıştırdım 🙂

JS Kütüphanesi:

function querystring(key) {
    var re = new RegExp('(?:\\?|&)' + key + '=(.*?)(?=&|$)', 'gi');
    var r = [], m;
    while ((m = re.exec(document.location.search)) != null) r.push(m[1]);
    return r;
}

$(document).ready(function () { 
    if (querystring('i') == "FRAME_CLOSE") {
        alert("Başarıyla eklenmiştir.");
        parent.jQuery.fn.colorbox.close();
    }
    else if (querystring('i') == "DOSYA_BOYUT") {
        alert("Dosya boyutu en fazla 10 MB olabilir.");
    }
    else if (querystring('i') == "DOSYA_TIP") {
        alert("İzin verilen dosya formatları: *.jpg, *.pdf, *.doc, *.docx, *.xls, *.xlsx, *.udf");
    }
    else if (querystring('i') == "DOSYA_YOK") {
        alert("Lütfen yüklemek istediğiniz dosyayı seçiniz.");
    }
    else if (querystring('i') == "HATA") {
        alert("Lütfen formu kontrol ediniz.");
    }
    else if (querystring('i') == "WEB_HATA") {
        alert("Beklenmedik bir hata oluştu. Lütfen tekrar deneyiniz.");
    }
});

Controller.cs:

[HttpPost]
public ActionResult FileUpload(int id)
{
     try
     {
         return Redirect("/Muvekkil/EvrakYeni?i=FRAME_CLOSE");
     }
     catch (Exception ex)
     {
         return Redirect("/Muvekkil/EvrakYeni?i=WEB_HATA");
     }
}

HttpContext.Session Özelliği

Bilişim kariyerimdeki yazılım geliştirme ile uğraştığım senelere bakacak olursak, her halde en bıkmış olduğum olduğum konu sessionlardır.

Ne zaman üyelik sistemi veya session ihtiyaç duyduğum bir uygulama üzerinde uğraşsam beni bir huzursuzluk kaplıyor 🙂 Yıllardır bu bende tramva olarak sürer ve en sonunda bununla ilgili birşeyler yazıp içimi dökmek istedim.

Her yazılımcının bildiği gibi HttpContext.Session özelliği kullanımı üç başlık altında özetleyebiliriz. Uygulamaları olarak gideceğimiz için ilk önce string tipindeki değişkenlerimizi oluşturuyoruz.

string _ad = "Hüseyin";
string _soyad = "Yıldırım";
string _sehir = "Manisa";

Sessionlarımıza değişkenlerimizi kayıt ediyoruz.

Session["ad"] = _ad;
Session["soyad"] = _soyad;
Session["sehir"] = _sehir;

Sessionlarımızdaki değeri okuyoruz.

_ad = (string)(Session["ad"]);
_soyad = (string)(Session["soyad"]);
_sehir = (string)(Session["sehir"]);

Web Form sınıfı dışında ise böyle kullanıyoruz.

HttpContext context = HttpContext.Current;
context.Session["ad"] = _ad;
_ad = (string)(context.Session["ad"]);

Teoride her şey ne kadar kolay ama uygulamada hatam nerede yaaa ama bulacağım sorunu 😉