MVC Postsharp ReturnValue Üzerine Birtakım Çalışmalar
MVC üzerinde postsharp kullanırken jsonresult tipinde standart bir mesaj döndürmek , ayrıca Exceptipn degerlerini yakalayıp, yakalanan hatayıda ajaxresponse seklinde sonuc dondurmek için birkaç satır calısma :)
using PostSharp.Aspects;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TmTKingStar.WebUI.Aspects
{
public class AjaxResult
{
public bool Sonuc { get; set; } = true;
public string Mesaj { get; set; }
public object Data { set; get; }
}
[Serializable]
public class AspectJsonFormCevap : OnMethodBoundaryAspect
{
private Exception _ex;
private bool _hatafirladiMi = false;
public override void OnEntry(MethodExecutionArgs args)
{
base.OnEntry(args);
}
public override void OnExit(MethodExecutionArgs args)
{
JsonResult r = new JsonResult();
if (_hatafirladiMi)
{
r.Data = new AjaxResult() { Mesaj = _ex.Message, Sonuc = false };
}
else
{
r = (JsonResult)args.ReturnValue;
r.Data = new AjaxResult() { Mesaj = r.Data == null ? "İşlem Başarılı" : r.Data.ToString() };
}
r.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
args.ReturnValue = r;
base.OnExit(args);
}
public override void OnException(MethodExecutionArgs args)
{
_hatafirladiMi = true;
_ex = args.Exception;
args.FlowBehavior = FlowBehavior.Continue;
base.OnException(args);
}
}
}
Editlenmiş versiyonu nu da ekleyelim ;)
namespace Deneme.Aspect.PostSharp
{
[Serializable]
public class FormCevapJson : OnMethodBoundaryAspect
{
public override void OnSuccess(MethodExecutionArgs args)
{
JsonResult result = new JsonResult();
result = (JsonResult)args.ReturnValue;
result.Data = new AjaxSonuc() { mesaj = result.Data == null ? "İşlem Başarılı" : result.Data.ToString() };
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
args.ReturnValue = result;
}
public override void OnException(MethodExecutionArgs args)
{
//hataları loglama- mail atma gib işlemler
if (true)
{
EmailSender emailsender = new EmailSender();
emailsender.Send(args.Exception, "WARNING");
}
JsonResult result = new JsonResult();
result.Data = new AjaxSonuc() {sonuc = false, mesaj = args.Exception.Message };
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
args.FlowBehavior = FlowBehavior.Return;
args.ReturnValue = result;
}
}
}
