正在分析ActionFilterAttribute中的ResultExecutedContext
本文关键字:中的 ResultExecutedContext ActionFilterAttribute | 更新日期: 2023-09-27 18:00:15
在我的控制器中,JsonResult方法如下所示:
public JsonResult MyTestJsonB()
{
return Json(new {Name = "John", Age = "18", DateOfBirth = DateTime.UtcNow}, "text/plain", JsonRequestBehavior.AllowGet);
}
在我下面的属性类的OnResultExecuted方法中。。。。
public class JsonResultAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
....
}
}
我希望能够如下解析filterContext。我如何完成以下任务??
我希望能够检测到结果的类型为System.Web.MVC.JsonResult.
在结果中,我希望能够深入研究数据属性
使用Property,我希望能够检测传入对象是否具有DateTime类型的属性。例如,如果对象如下:{Name="John",Age="18",DateOfBirth={4/24/2014 7:05:58 PM}},则我希望能够检测到属性DateOfBirth的类型为DateTime。
如果它有DateTime,那么我想采取某些行动。
您可以使用System.Reflection
:实现这一点
public class JsonResultAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
// Detect that the result is of type JsonResult
if (filterContext.Result is JsonResult)
{
var jsonResult = filterContext.Result as JsonResult;
// Dig into the Data Property
foreach(var prop in jsonResult.Value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
var propName = prop.Name;
var propValue = prop.GetValue(jsonResult.Value,null);
Console.WriteLine("Property: {0}, Value: {1}",propName, propValue);
// Detect if property is an DateTime
if (propValue is DateTime)
{
// Take some action
}
}
}
}
}
不要忘记在操作中添加[JsonResultAttribute]
。