我刚接触这个问题的新手
我创建了一个异常方面,在onexception中我设置了这个返回值
public class aspect:OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
args.ReturnValue=-100;
args.FlowBehaviour=FlowBehavior.Continue;
}
}
我在这里使用方面
DBLayer
{
[ExceptionAspect())
public int GetMeVal()
{
throw new Exception();
//now how to get the args.returnValue of -100 here
//remaining code needs to be executed ?
}
}
的HomeController
ControllerMethod()
{
x=DBLayer.GetMeVal() -- Here I want the -100 to be returned
/// need to set status code based on x value
}
1)请告诉我如何实现上述目标?
谢谢
答案 0 :(得分:1)
不,抛出异常后无法执行剩余的代码。 应用方面后,您的方法将与此类似(简化):
public int GetMeVal()
{
try
{
throw new Exception();
// remaining code
}
catch
{
return -100;
}
}
正如您所看到的,异常会在catch块中捕获,并且无法执行剩余代码。您可以尝试做的是将剩余的代码重构为另一种方法或其他方面。
如果您在当前方面之前有另一个OnMethodBoundaryAspect
方面,则FlowBehavior.Return
会调用另一方面的OnExit(MethodExecutionArgs)
方法。如果适用,您可以将“剩余代码”移至OnExit(MethodExecutionArgs)
方法,并使用MethodExecutionArgs.ReturnValue
访问返回值。
[Serializable]
public class Aspect : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
args.ReturnValue=-100;
args.FlowBehaviour=FlowBehavior.Return;
}
}
[Serializable]
public class Aspect2 : OnMethodBoundaryAspect
{
public override void OnExit(MethodExecutionArgs args)
{
Console.WriteLine("Return value = {0}", args.ReturnValue);
// remaining code
}
}
[Aspect2(AspectPriority = 1)]
[Aspect(AspectPriority = 2)]
public int GetMeVal()
{
// ...
}