
Just enable “Integrated Windows authentication” of your IIS web application
If this is not working try to re-register your .NET framework with aspnet_regiis.exe
Happy coding.
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
İş yerinde geliştirmekte olduğumuz projelerde şimdiye kadar MVC Framework Preview 3 kullanmaktaydık. ASP.NET ten farklı çalışma mekanizması nedeniyle yukardaki hatayı sık sık alır ve ValidateRequest = false yapmamıza rağmen sorunu aşamazdık. Çünkü post edilen bilgi önce kontroller a düşmekte ve exception oluşmaktaydı.
Peki temel olarak bu hatanın nedei neydi. Önce bunu bir hatırlayalım.
ASP.NET kullanan yazılımcılar form alanlarından gelebilecek zararlı kodlara karşı daha fazla korunmaya sahiptirler. Yapılabilecek XSS (Cross site script) saldırılarını önlemek yapılan tüm istekler bir geçerlilik kontrolü (validation) işleminden geçer. Bu işlemde temel olarak script bloklarını başlatan ve bitiren taglerde yer alan < ve > işaretleri aranır. Bulunduğu zaman da "System.Web.HttpRequestValidationException" oluşturulur.
Bu sorunu geçiştirmek için sayfa seviyesinde ya da uygulama seviyesinde (ki bu hiç mi hiç tavsiye edilmez.) Geçerlilik kontrolünü kapatabilirsiniz. Bu durumda dış kaynaklardan gelen tüm girdileri zararlı olabilecek metinlere, karakterlere karşı kontrol etmeniz ve filtrelemeniz gerekmektedir.
Bizim durumumuzda ise hiçbir şekilde bu geçerlilik kontrolü geçiştirilememekteydi. Ta ki MVC 1.0 çıkana kadar. Aslında bu özellik Preview 4 ile birlikte gelmesine rağmen biz 3 den direkt olarak MVC 1.0 a atladığımızdan burada farkına varabildik.
Bu yenilik sayesinde controller class tanımımız ya da herhangi bir controller action metod tanımımız için "istek geçerlilik kontrolü"nü devre dışı bırakabiliyoruz.
Şöyle ki:
Bu öznitelik (attribute) sayesinde konulduğu yere göre ilgili controller sınıfının tüm metodları ya da sadece belirli action metodları için bu özellik iptal edilebilmekte.
sınıf Seviyesinde kullanım
1 [ValidateInput(false)]
2 public class BilgilerController : Controller
3 {
4 }
Controller Action seviyesinde kullanım
1 [ValidateInput(false)]
2 public ActionResult BilgilerFormIslem()
3 {
4 return View("abc");
5 }
Böylece ilgili sayfalarda HTML kod kabul eden editör vb. kontroller kullanabiliyoruz. Tabi tekrar hatırlatalım. Bu durumda gelen içeriğin güvenli olup olmadığının denetlenmesi ya da filtrelenmesi yazılımcı tarafından gerçekleştirilmek zorunda...
Kolay gelsin...
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Bu sabah üzerinde çalışmakta olduğumuz bir projenin çalışmakta olan cookie yazma okuma metodlarını kullanarak bir geliştirme yapmaya çalıştım. Enteresan şekilde browser kapatılıp tekrar açıldığında cookie kayboluyor ve yazdığım kod yapması gereken işlemleri yapamıyordu. Enteresan diyorum çünkü kullandığım cookie yazma ve okuma metodları sitenin bir çok yerinde kullanılıyor ve her hangi bir sorun yaşanmıyordu.
Kodu incelediğimizde gayet nizami görünüyordu.
1 var cookieToSetValue = new HttpCookie(CookieKeyName, CookieValue);
2 cookieToSetValue.Expires.AddDays(1);
3 HttpContext.Current.Response.Cookies.Add(cookieToSetValue);
Debug ediyor ve kodun doğru çalıştığını varsaydığımız için metodun içine girip bakmaya gerek görmüyorduk. Sonra sağolsun Burak Kardeşim metodun içine girmeyi düşündü ve expire date değerinin yanlış olduğunu fark etti. Böylece acımız da son bulmuş oldu.
Koddaki hata mevcut nesne üzerindeki sonlanma tarihinin üzerine birgün eklenmesiydi. Eğer burada bir tarih daha önce ayarlanmamış ise değer en küçük tarih değeri oluyor ve buna bir gün eklendiği için cookie otomatik olarak sonlanıyordu.
Düzeltmek için kurguyu biraz değiştirip günün tarihine bir gün ekle diyerek sorunu aştık.
1 cookieToSetValue.Expires = DateTime.Now.AddDays(1);
Kıssadan Hisse : Eğer cookileriniz kayboluyorsa önce Expires propertysine bakın :)
2 kişi tarafından 4.0 olarak değerlendirildi
- Currently 4/5 Stars.
- 1
- 2
- 3
- 4
- 5
Son günlerde Visual Studio 2008 ile çalışırken can sıkıcı bir hata mesajı almaya başlamıştım...
Hata mesajı "Error connecting to undo manager of source file 'x.aspx.designer.cs' derken bu mesajı debug etmek istediğimde veriyor olması çok anlamsız geliyordu... Anlamsız geldiği için anlamsız bir çözüm geliştirdim... İlgili dosya bi şekilde bozuluyor varsayımı ile bu dosyanın IDE tarafından oluşturulan bir dosya olduğu gerçeğini birleştirerek adı geçen dosyayı sildim... Daha sonra ilgili .ASPX dosyasına Visual Studio 2008 IDE ile Solution Explorer da ters tıklarak "Convert to Web Application" dedim ve dosyanın tekrar oluşturulmasını sağladım... Ve sorun çözüldü... Arada bir tekrar ediyor ve çözümü tekrarlıyorum...
Dosya neden bozulur, nedenini tam anlasam çok rahatlayacağım... :)
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Bugün enterasan bir gündü... Tüm ekip güne garip hatalarla başlamış, çıldırma kat sayısı erken saatlerde tepe yapmıştı.
Her zaman olduğu gibi yazmaya başlamış, tıkır tıkır tıkırdıyorduk... Önümde basit bir kayıt formu işi vardı. Cumadan formu yazmış ve çalıştırmıştım. Akşam çıkmaya yakın sayfada kullandığım custom validator kontrolleri için yazdığım javascript fonksiyonlarını harici bir dosyaya taşımış, ilgili formun bulunduğu sayfaya .js dosyasına referans eklemiş, akabinde de servise yetişmek için koştura koştura çıkmıştım...
Bugün ise o formun artık çalışmadığını fark ettim... Sorunun client js fonksiyonlarında olduğu aşikardı... Buton sayfayı post etmiyor... Click event handlerına gelemiyordum... .js kodlarına tekrar tekrar baktım... Ama işin içinden bir türlü çıkamıyordum...
Sonunda Özkan arkadaşıma danıştım... "Şuna bir de sen bak!" dedim... Sağolsun işini bıraktı ve baktı... Bir miktar tırmalamadan sonra html head bölümünde javascript dosyasına referans verirken script tagini kisa yoldan <script type="" src="" /> şeklinde kapattığımı fark ettik... Editör (VS 2008) bu yazımı kabul ediyor fakat uygulama sırasında her nasılsa js fonksiyonları çalışmasına rağmen post etme işi gerçekleşmiyordu...
Script tagini <script type="" src="" ></script> şeklinde düzelttik ve sorunu biraz vakit kaybetsek de çözmüş olduk...
Kıssadan hisse: 2. bir çift göz her zaman iyidir...
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Geçenlerde Bursa Datahouse eğitim firmasında bir eğitim sırasında web.config dosyasına eklemek istediğimiz bir elemanı yazmaya başladığımızda intellisense özelliği bize önerilerde bulunmamış ve yarı yolda bırakmıştı. Biz de klavyemize kuvvet yazmıştık. Akabinde eğitimi takip eden arkadaşlardan birisi bunun "Web Site Administration Tool (WSAT)" a girdikten sonra gerçekleştiğini söylemişti.
Figür 1: Kaybolan Intellisense
Not: Web Site Administration Tool, basit bir web arayüzü ile uygulamanızla ilgili ayarlarınızı yapabilmeniz için .NET Framework 2.0 ile sağlanan bir araçtır. Visual Studio 2005 içinde "Website > ASP.NET Configuration" menü seçeneği ile ulaşabilirsiniz.
Gerçekten de WSAT a girdikten sonra web.config dosyamda intellisense kullanarak düzenleme yapamamaya başlamıştım.
Varsayılan bir web.config ile karşılaştırma yaptıktan sonra sorunun aracın eklediği XML Namespace tanımından kaynaklandığını farkettim.
Sorunu düzeltmek için configuration elemanında tanımlanan xmlns özniteliğini (attribute) kaldırmak yeterli oldu.
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
elemanını
<configuration>
şeklinde düzeltebilirsiniz...
Figür 2: Intellisense tekrar çalışıyor
Klavyeler şen ola...
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Projesini yürütmekte olduğum müşterimiz ÇEVKO da yeni bir güne neşe ile başlamış görev listemdeki görevleri birer birer Packman hesabı yiyip bitiriyordum...
Geliştimekde oldugum bir rapor için bir sorgu yazmak icap etti. MySQL için geliştirilmiş ücretsiz aracımızı (Sqlyog) açmak suretiyle işe başladım. 5-10 dakika geçmeden sorgu bitmiş ve doğru olarak çalışıyordu. Derin bir oh çekerek, "oldu olacak bunu bir stored procedure yapayim!" dedim. Demez olaydım. Gerekli parametre tanımlarını yapıp sorguyu değiştirdikten sonra stored procedure ü oluşturmak için F5 tuşuna her bastığımda aşağıdaki hatayı alıyordum.
Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT ' at line 7 (0 ms taken)
Oysa hatayı belirtildiği yerde hiç bir hata yoktu... Çıldırmamak işten değildi... Aradım, taradım... Forumları okudum... Bazı yerlerde bunun bir bug olduğu yazıyordu. "Aha şimdi zıçtık!" diye düşündüm... Diğer yandan da aklım almıyordu. Tamam uzmanı değildim ama bu yazdığım ilk sorgu ya da ilk stored procedure değildi ki! Üstelik sorgu olarak düzgün çalışıyordu.
Yaklaşık iki saat debelendikten sonra. Sorgunun sonunda ";" koymadığımı fark ettim.
Veritabanı uzmanları için böyle bir hata yapılamaz bir hata olabilir. Ama iyi bilen bir insan bile bu ufak detayı atlayabilir. Burada iş verilen hata mesajında aslında. Böyle genel bir hata vereceğine "Kardeş noktalı virgül koymayı atladın!" dese kıyamet mi kopar! Ama ne yapalım "Ucuz etin yahnisi sert olur" diye boşuna söylememiş Atalarımız...
Klavyeleriniz şen ola...
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Bu hatayı aldığınız zaman panik yapmayın.
Genellikle bir veritabanı tablosunun verilerini bir webform üzerine sürükle bırak ile listelemeye çalıştığınızda Visual Studio sizin için gerekli kontrolleri ve sorguları oluşturur. Burada Visual Studio nun bilmediği şey sizin veritabanınızda bu değerlerin nasıl oluşturulduğu konusudur.
Veritabanı tasarımı yaparken, genelde tablolar içinde veri satırını tanımakta kullanacağımız bir alan oluştururuz. Bu alanları genelde kayıt eklendiğinde otomatik olarak artacak şekilde ayarlarız ve veritabanı sisteminin bu işi bizim yerimize yapmasına izin veriririz. İyiki de veririz yoksa her seferinde bu alanın değerini de veritabanına göndermemiz gerekirdi.
İşte hatamız tam da bu konuyla ilgili. Visual studio tarafından oluşturulan INSERT cümlesine baktığınızda bu cümle içinde ilgili ID alanının da yeraldığını göreceksiniz. Hatayı gidermek için bu alanı sorgu cümlesi içinden çıkarmanız yeterli olacaktır.
Hatalı Sorgu:
INSERT INTO [Icerikler] ([Icerik_Id], [Baslik], [Icerik]) VALUES (?, ?, ?)
Düzeltilmiş Sorgu:
INSERT INTO [Icerikler] ([Baslik], [Icerik]) VALUES (?, ?)
Klavyeleriniz şen ola...!
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5