我正在使用ASP.NET MVC 5,我想记录控制器操作中发生的所有异常。
为了实现这一点,我使用PostSharp(在dll中)创建自定义方面,我已经创建了编写日志文件的代码,现在我希望方面可以在控制器范围内(不想手工应用于所有方法)。
方面的代码如下所示:
using System;
using PostSharp.Aspects;
namespace Banlinea.Ceb.Domain.Aspects
{
public class LogException : OnExceptionAspect
{
public LogException()
{
ApplyToStateMachine = true;
}
public override void OnException(MethodExecutionArgs args)
{
//Code for logging the exception
args.FlowBehavior = FlowBehavior.ThrowException;
}
}
}
现在,我想在控制器中做的是做这样的事情:
[LogException]
public class MyController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Other()
{
return View();
}
public ActionResult Another()
{
return View();
}
}
装饰课程,我该怎么做?
答案 0 :(得分:0)
你可以通过实施IAspectProvider
来做到这一点http://doc.postsharp.net/iaspectprovider
MyApplication-0.0.1-SNAPSHOT.war
答案 1 :(得分:0)
您可以使用名为attribute multicasting的功能在代码库中应用PostSharp方面。
例如,在类级别或程序集级别应用方法级别方面时,它会自动复制到相应类或程序集中的所有方法。您还可以通过设置属性属性来过滤目标元素,例如AttributeTargetTypes,AttributeTargetMemberAttributes等。
您问题中的示例代码实际上应该按预期工作。