ASP.Net MVC ile Post Datasını Loglama

02 Kasım 2018 1 dk okuma süresi 354 okunma

Bazen controller'da post işlemlerini loglamak isteyebilirsiniz. Bunun için her controller'a gidip bir log dosyası oluşturmanıza gerek yok. Kendinize Controller sınıfından türeyen bir baseclass veya ActionFilterAttribute'ünden türeyen bir filter class'ı yazabilirsiniz. Ben örneği filter class üzerinden yapıyorum, her controller'a uygulamak istemeyeceğinizi düşünüyorum. Bu nedenle attribute kullanmak en mantıklısı. Ben loglama için Nlog kullanıyorum, gerçi o kısım çok önemli değil, siz kendinize göre konfigüre edebilirsiniz.

using System.Linq;
using System.Web.Mvc;
using Newtonsoft.Json;

public class PostLogFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // sadece post methodunda bu işlemi yaptırıyoruz
        if (filterContext.HttpContext.Request.IsPost())
        {
             var logger = new LoggerRepository(NLog.LogManager.GetCurrentClassLogger());
             var form = filterContext.HttpContext.Request.Form;
             var dictionary = form.AllKeys.ToDictionary(k => k, k => form[k]);
             var jsonPostedData = JsonConvert.SerializeObject(dictionary);

            logger.Info(jsonPostedData);
        }

       base.OnActionExecuting(filterContext);
    }
}

Kullanımı ise şu şekilde;

Controller veya direk action üzerine aşağıdaki gibi [PostLogFilter] yazarak aktif edebilirsiniz.

[PostLogFilter] 
public partial class MyController : Controller 
{
 // ... 
}



Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
"The remote certificate is invalid according to the validation procedure" hatası ve çözümü

Multithread uygulamalarda ReaderWriterLockSlim mekanizması ile güvenli dosya yazma işlemleri

Kestrel, Code Modules ve Http.Sys gibi sunucu kavramları ve açıklamaları