ASP.Net MVC ile Post Datasını Loglama

02 Kasım 2018 1 dk okuma süresi 12 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.
Asp.net Core ile farklı bir class library'den appsettings json dosyasını kolayca okumak

Hatalı bundle kullanımından dolayı alınan MIME type hatası ve çözümü

Specified Argument was out of the range of valid values Parameter name : site hatası ve çözümü