ASP.Net MVC ile Post Datasını Loglama

02 Kasım 2018 1 dk okuma süresi 403 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.
Gzip veya Brotli ile sunucudan gelen cevapları sıkıştırıp performans artırma

"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