.net mvc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
.net mvc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

18 Kasım 2016 Cuma

Asp.Net Mvc Yönlendirme (Routing) İşlemleri

2 yorum
Asp.Net Web Forms uygulamalarında her url bir .aspx  dosyası ile eşleşiyordu. Örneğin; www.codefixes.xyz/merhaba.aspx url'si bir merhaba.aspx dosyası ile bağlantılıydı.

Asp.Net Routing kavramını tanımlıyarak, her url'nin bir fiziksel dosya ile ilişkişendirilmesi zorunluluğunu ortadan kaldırmış oldu. Routing sadece Mvc frameworküne ait bir kavram değildir, aynı zamanda Asp.Net WebForms uygulamaları ile de kullanılabilir.

Route işlemi bir url pattern oluşturur ve bu patternları bir RouteTable'da tutarak Routing işlemi ile hangi dosyanın çağırılacağına karar verir. İşlem şemasını aşağıdan inceleyebilirsiniz:

asp.net mvc routing işlemleri

Her Mvc uygulaması en azından bir tane route konfigürasyonu içermelidir. Mvc frameworkü tarafından bu App_Start klasörü altında RouteConfig class dosyası içerisinde varsayılan olarak oluşturulmaktadır.

 public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Yukarıda görüldüğü gibi yoksayılacak url bilgisi ve varsayılan olarak oluşturulan konfigürasyonu inceleyebilirsiniz.  Buradaki konfigürasyon sonucunda bir controllera bağlı bir action metodu çağrılabilir ve eğer varsa bir id parametresi bu metoda pass edilebilir. Aynı yukarıdaki gibi, farklı yapılarda url bilgileriniz varsa siz de kendi konfigürasyonununuzu buraya yazabilirsiniz. Routing mekanizması, sizin yazacağınız konfigürasyon ile eşleşen bir url isteği gelmesi halinde otomatik olarak bu konfigürasyon bilgilerini kullanacaktır.

Varsayılan olarak gelen yukarıdaki konfigürasyona örneğin aşağıdaki gibi bir istek gelebilir:

www.codefixes.xyz/Home/Index/2

Bu kısımda kırmızı ile yazılan Home bizim Controller ismimizi içermektedir, Index kısmı bu controller içerisindeki Action metodumuzun ismidir, 2 ise bizim routing konfigürasyonumuzda belirttiğimiz isteğe bağlı id parametresidir. Yukarıdaki varsayılan konfigürasyonla eşleşecek farklı url örneklerini aşağıdan inceleyebilirisiniz:

URLControllerActionId
http://localhost/homeHomeControllerIndexnull
http://localhost/home/index/123HomeControllerIndex123
http://localhost/home/aboutHomeControllerAboutnull
http://localhost/home/contactHomeControllerContactnull
http://localhost/studentStudentControllerIndexnull
http://localhost/student/edit/123StudentControllerEdit123

Route Kısıtlamaları

Yönlendirme yaparken verdiğimiz parametreler için bazı kısıtlamaları RouteConfig dosyasında konfigürasyon oluştururken verebiliriz:

  routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional },
constraints: new { id = @"\d+" }
);
Örneğin bu konfgürasyonda id parametesinin sadece nümerik parametre alabileceğiniz constraints kısmında belirttik.

Route konfigürasyonlarmızı belirttikten sonra bunu uygulama başlangıcında (Application_Start() metodunda) Global.asax dosyasında register ediyoruz:

protected void Application_Start()
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Yazıyı Oku

29 Mart 2016 Salı

.Net Mvc ActionResult Tipleri

Yorum Bırak
ActionResult bir abstract classtır ve birkaç alt tipi bulunmaktadır. Bu alt tipleri controller tarafından kendi ihtiyacımıza göre döndürebiliriz. Bunlar aşağıdaki gibidir:

Yazıyı Oku

.Net Mvc Html ActionLink Arka Plan Resmi

Yorum Bırak
Html ActionLink'ler için arka plan resmi vererek bir button gibi kullanmak istiyorsak bunu ActionLink'in css özellikleri ile oynayarak aşağıdaki gibi değiştirebiliriz:

Yazıyı Oku

28 Mart 2016 Pazartesi

.Net Mvc Error Handling

Yorum Bırak
Asp.Net Mvc frameworkte, yapılan işlemler soncunda alınan hatalar için hata sayfasına yönlendirme işlemi yapmak için  Global.asax dosyasındaki Application_Error metodunu aşağıdaki şekilde düzenleyebiliriz:

protected void Application_Error(object sender, EventArgs e)
{
   Exception exception = Server.GetLastError();
   // Exceptionu logluyoruz.

   ILogger logger = Container.Resolve<ILogger>();
   logger.Error(exception);

   Response.Clear();

   HttpException httpException = exception as HttpException;

   RouteData routeData = new RouteData();
   routeData.Values.Add("controller", "Error");

   if (httpException == null)
   {
       routeData.Values.Add("action", "Index");
   }
   else //http exception handle kısmı
   {
       switch (httpException.GetHttpCode())
       {
          case 404:
              // Sayfa bulunamadı hatası için
              routeData.Values.Add("action", "HttpError404");
              break;
          case 500:
              // Server hatası için.
              routeData.Values.Add("action", "HttpError500");
              break;

           // default hata için genel bir hata sayfası 
           default:
              routeData.Values.Add("action", "General");
              break;
      }
  }           

  // Pass exception details to the target error View.
  routeData.Values.Add("error", exception);

  // serverdaki hatayı temizler.
  Server.ClearError();


  Response.TrySkipIisCustomErrors = true; 

  // hedef controllerı çağır ve routedatayı pass et.
  IController errorController = new ErrorController();
  errorController.Execute(new RequestContext(    
       new HttpContextWrapper(Context), routeData));
}

burada en çok karşılaşılan 404 ve 500 hataları için yönlendirme bulunmakta, diğer hata kodları için de switch case bloğu için tanımlama yapabilirsiniz.
Yazıyı Oku