Multiple actions were found that match the request

Merhaba arkadaşlar

Bugünkü yazımda, benim gibi MVC Projenizde ayrıyetten bir de WEB API kullanıyorsanız bu hata ile karşılaşmanız muhtemeldir.

Öncelikle hatanın neden kaynaklandığını ve senaryomu anlatmak isterim.

Üzerinde çalıştığım .NET MVC projemde, bu kez MVC’de kodlanan ekranların Android mobil uygulamasında WebView componenti içerisinde de kullanılacak hizmet vermesi gerekti. Oturup sıfırdan native uygulama yazmak yerine, mobil uygulamadaki belli başlı alanları native yapıp, diğer kısımları mevcut responsive olan MVC projemi kullanmaya karar verdim.

İlk olarak uygulamaya giriş yapacak kullanıcıların “Üyelik Girişi” login mekanizmasını kullanmaları için projedem WEB API kullanarak webservis oluşturdum. Bu webservis ile gerekli kontroller yapılıp, kullanıcının uygulamaya girişi sağlanıyordu.

Akabinde bir de kullanıcılar için “Şifremi Unuttum” mekanizması gerekliydi. Fakat sorun şu ki App_Start/WebApiConfig.cs Route class’ımdaki default “routeTemplate” sadece controller’a bakıyordu.

Bu nedenle adres çubuğundan web api’ye ait method çağırıldığında aşağıda hata ile karşılaşıyordum.

ExceptionMessage :Multiple actions were found that match the request

multiple-actions-were-found-that-match-the-request
multiple-actions-were-found-that-match-the-request

Akabinde App_Start/WebApiConfig.cs classında yer alan kodu bir aşağıdaki blok ile değiştirdiğimde sorunu gidermiş oldum.

Böylelikle Web Api çağırıldığında sadece controller’a değil, hem controller’a hem de action’ı birlikte kontrol edip ona göre süreci yönetmeye başlayacak.

Umarım faydalı bir yazı olmuştur, bir sonraki yazımda görüşmek üzere

SQL Tablosunun C# Classını Oluşturmak

Merhaba arkadaşlar,

Bildiğiniz üzere projelerimize database First yaklaşımı üzerinden Entity Framework ORM Tool’u bağlarken, veritabanındaki alanlarımızı class haline getirmemiz gerekmektedir. Zaman alan ve sıkıcı bir iş olduğu için kolay yolunu aramaya başladım.

Dostum Yavuz Aydoğan sağolsun bu konuda elinde daha önceden bulunan bir SQL Sorgusunu benimle paylaşmıştı, ben de tabiki blog takipçilerimle paylaşmak için izin istedim kendisinden.

Teşekkürler Yavuz Aydoğan iyiki varsın 🙂

Senaryomuz şu şekilde:
[Service].[ScrapApprovalPaymentType] adında SQL Server’da bir tablomuz var. (Örnek olduğu için tabloyu bilerek kısa tuttum, siz daha fazla field’a sahip tablolarda kullanabilirsiniz.)

Aşağıdaki kodu SQL Server query’de çalıştırdığınızda bize [Service].[ScrapApprovalPaymentType] tablosunu direk C# class’ı içerisinde yer alan property’lerini dönecek.

T-SQL Kodumuz:

Dönen sonuç

Ufak tablolarda çok fazla vakit kazandırmasada, fazla field içeren tablolarda hayat kurtaran bir yol olarak sıklıkla kullanıyorum 🙂

Umarım sizinde işinize yarar, bir sonraki yazımda görüşmek üzere

jQuery Ajax ile HTML Tablo Doldurmak

Merhaba arkadaşlar,

Bugünkü yazımda, modern MVC Web projelerinde sıklıkla kullanılan jQuery Ajax ile HTML tablo oluşturma işlemini nasıl gerçekleştirebileceğinizi paylaşmak istiyorum.
Daha sonra dilerseniz ASP.NET Projelerinize’de bu örneği ufak tefek değişiklikler ile uygulayabilirsiniz.

İlk olarak senaryomuzdan bahsedeyim, ardından adım adım gerçekleştirelim.

Bu örnek sonunda site ziyaretçimiz, ekranında göreceği butona tıklandığında database’de yer alan üyeleri UserTypeId parametresine göre tablonun içerisinde görecek.

1) Öncelikle dataları getireceğimiz butonu ekliyor ve ardından butonumuzun Id’sini “btnLoadUserData” olarak tanımlıyoruz.

2) Dataların gösterileceği div’i sayfamıza ekliyoruz.

3) Controller tarafında ise yapımız şu şekildedir.
İşlemleri gerçekleşeceği controller’ın adı: UserController

4) _userListPartial adında, yeni bir Partial View oluşturuyoruz. Burada dikkat etmeniz gereken, Partial View’daki modelimiz, UserController‘daki GetMembers ActionResult’ından dönen model ile aynı olmalıdır.

5) Butona tıklandıktan sonra ne olacak peki ? Ajax Get ile UserContoller‘ın içinde yer alan GetMembers metodumuzu UserTypeId parametresini gönderiyoruz. GetMembers metodu bize liste dönderecektir. (İster liste, ister Dto döndürebilirsiniz. Bu yazımızda basit bir örnek üzerinden gideceğimiz için şimdilik liste göndermemiz, aklı karışan arkadaşlar için daha faydalı olacaktır. 🙂 )

The End… Hepsi bu kadar arkadaşlar 🙂

Paylaştığım örnek kodları ve işleyişi, kendi iş akışınıza uyarlayabilir, kolaylıkla projelerinizde kullanabilirsiniz.

Umarım jQuery Ajax ile Tablo Doldurma konusunda sorun yaşayan arkadaşlarımıza kolaylık sağlar. Bir sonraki yazımda görüşmek üzere, sağlıcakla kalın 🙂

MVC Redirect Anchor Tag

Merhaba arkadaşlar,

Bir proje kapsamında çalışırken, yeni oluşturulan veya üzerinde değişiklik yapılan bir View sayfasının Controller üzerinden RedirectToAction metodu ile farklı bir sayfaya yönlendirilmesi gerekliydi.

Fakat bu yönlendirilen yeni sayfa Bootstrap TAB içerdiği için belirtilen (tab_content_detail) tab’ın açılması talep ediliyordu.

Sizin de böyle bir ihtiyacınzı olursa aşağıdaki örnekte RedirectToAction metodunu nasıl Anchor Tag ile açılacağını inceleyebilirsiniz.

Umarım işinize yarar, bir sonraki yazımda görüşmek üzere.

Mevcut REDIRECT TO ACTION Kodumuz

Yeni Anchor Tag kullanılan REDIRECT Kodumuz

The process cannot access the file because it is being used by another process hatası ve çözümü

Merhaba arkadaşlar,

Bir proje kapsamında projeye yüklenen resim, belirli ölçülerde bir dizi işlem yapılarak farklı klasörlere kayıt edilmesi gerekiyordu. Örneğin: 1024x768px’lik bir fotoğraf 3 ayrı boyutta (150×150, 60×60, 30×30, vs..) UserFiles/Images/ klasörüne atılacak gibi düşünebilirsiniz.

Bu işlem sonlandığında ise ilk yüklenen orjinal resmi silmem gerekiyordu. (1024x768px’lik olan)

İşte tam bu noktada File.Delete() metodu çalıştırıldığında “The process cannot access the file because it is being used by another process” hatası ile karşılaştım.

Bu hatanın sebebi, işlemler tamamlanmasına rağmen .net dosyamızı işlem durumunda/sırasında tutuyor. Fakat ben çoktan tüm işlemlerimi bitirmiş, gerekli dosyaları gerekli klasörlere kayıt etmiştim bile 🙂

Sorunun çözümü için birçok farklı yol ve yöntem denemedim ama bir türlü sonuca erişemedim.

İşte tam bu noktada devreye GarbageCollector‘u soktum 🙂 Öncelikle kuyrukta bekleyen işlemleri toparla ( GC.Collect() ) ardından bu iş listesine iş parçacıklarını boşalt geçerli işi ( Orjinal dosyayı silme işlemini) askıya al/bitir.

Sonra tekrardan File.Delete metodu ile orjinal resmimi gönül rahatlığı ile silebildim.

Biraz karışık anlatmış olabilirim ama örnek method’u aşağıdan incelerseniz, net olarak anlaşılacaktır.

Umarım aynı sorunu yaşayanlara yardımcı olmuştur. Bir sonraki yazımda görüşmek üzere

Örnek Methodumuz

MVC Foreach içinde Çoklu Foreach Gruplama

Merhaba arkadaşlar,

Üzerinde çalıştığım bir MVC projesi kapsamında talep edilen tek div elementindeki row class’ının içinde 3’lü grup olacak şekilde div class=”col-md-4″ elementini yerleştirmem gerekti.

Aşağıdaki kod hayli hayli işimi gördü, sizinle de paylaşmak istedim. Umarım işinize yarar.

Bir sonraki yazımda görüşmek üzere, şimdilik hoşçakalın.

ÇIKTISI / OUTPUT

DevExpress LookupEdit EditValueChanged ve EditValueChanging Değer Yakalama

Merhaba arkadaşlar,

Neredeyse her DevExpress kullanıcısının sıklıkla karşılaştığı LookupEdit komponentine ait 2 event ile çağrılan değerlerin yakalanmasını bu yazımda paylaşacağım.

lueCampaign_EditValueChanging:
lueCampaign dropdownlist’inde seçim esnasında gelen değerleri aşağıdaki gibi yakalayabilirsiniz.

lueCampaign_EditValueChanged:
lueCampaign dropdownlist’inde seçimin tamamlanmasının ardından değerleri aşağıdaki gibi yakalayabilirsiniz.

C# cannot implicitly convert type ‘bool?’ to ‘bool’. An explicit conversion exists (are you missing a cast?) hatası

Merhabalar,

Bugün herkesin bildiği ama yeni meslektaşlarımızın biraz zamanını alan çok basit bir hatanın nedenini ve çözümünü paylaşmak istedim.

Hatamız “cannot implicitly convert type ‘bool?’ to ‘bool’. An explicit conversion exists (are you missing a cast?)

Ufak bir senaryo üzerinden ilerleyelim;
Oluşturduğumuz bir null değer atanabilen değişkeni, farklı bir durumda tekrar başka bir değişkene atamak istediğimizde oluşur. Aşağıda örnek senaryo ve yorumlar ile açıklamaya çalışacağım.

Bu hatanın nedeni; oluşturduğumuz
bool? 3 değişken alabilir. true, false ve null
bool 2 değişken alabilir. true, false

Çözümü ise çok basittir. C# Ternary Operator kullanarak aşağıda şekilde boolean değeri yakalayabilirsiniz.

C# Ternary Operator hakkında bilgi sahibi olmak için lütfen tıklayınız.

C# does not contain a definition for ‘ToList’ and no extension method ‘ToList’ accepting a first argument of type hatası

Merhaba arkadaşlar,

Dalgınlık sebebi ile eklemediğimiz referanslardan dolayı kod yazarken class ve metodlarınıza göre aşağıdaki hata ile karşılaşabilirsiniz.

does not contain a definition for ‘ToList’ and no extension method ‘ToList’ accepting a first argument of type

Sorunun çözümü ise çok basittir.

Direk olarak namespace’in üstünde referanslarımızı çağırdığımız bölüme using System.Linq; eklememiz yeterlidir.

Microsoft MSDN Kütüphanesinde ayrıntılı bilgi alabilirsiniz.
http://msdn.microsoft.com/en-us/library/bb342261.aspx

Ufak ama faydalı bir not olduğuna inanıyorum, bir sonraki yazımda görüşmek üzere.

C# DataTable To Object Mapping

Merhaba arkadaşlar,

Bugün uzun zamandır paylaşmak istediğim çok kullanılan bir convert işlemi üzerine yazı eklemek istedim.

Bazı durumlarda gerekli olan LINQ sorguları projemiz içerisinde gerçekten can sıkıcı ve zorlayıcı olabiliyor.

Burada imdada T-SQL veya farklı bir yol ile çekilen dataların, objemizin içine map’lenmesi yolu yetişiyor.

Senaryomuza göre, Video classımıza bir DataTable‘dan dataların maplenmesini göstereceğim.

Video Classımızın içeriği aşağıdadır.

dtVideoList DataTable’ımıza verileri çektik.

Ardından aşağıdaki gibi map’lemek istediğimiz sorgumuzda yer alan VideoID, VideoTitle, VideoCreatedOn, Count alanlarımız Video classımızda yer alan ID,Title, CreatedOn, ViewCount alanlarına maplenmiş olacak.

Son durumda ise sorgumuzda gelen datalar başarı ile Video classımızdaki alanlar ile map’lendi. Bundan sonrası sizin gerçekleştirmek istediğiniz işlemlere göre gerçekleşebilir.

Umarım faydalı olmuştur, bir sonraki yazımda görüşmek üzere