如何创建一个包装具有特定返回类型的操作的 fubumvc 行为,如果在执行操作时发生异常,那么该行为会记录异常并填充返回对象上的某些字段?我尝试了以下方法:
public class JsonExceptionHandlingBehaviour : IActionBehavior
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
private readonly IActionBehavior _innerBehavior;
private readonly IFubuRequest _request;
public JsonExceptionHandlingBehaviour(IActionBehavior innerBehavior, IFubuRequest request)
{
_innerBehavior = innerBehavior;
_request = request;
}
public void Invoke()
{
try
{
_innerBehavior.Invoke();
var response = _request.Get<AjaxResponse>();
response.Success = true;
}
catch(Exception ex)
{
logger.ErrorException("Error processing JSON request", ex);
var response = _request.Get<AjaxResponse>();
response.Success = false;
response.Exception = ex.ToString();
}
}
public void InvokePartial()
{
_innerBehavior.InvokePartial();
}
}
但是,尽管我AjaxResponse
从请求中获取了对象,但我所做的任何更改都不会发送回客户端。此外,该操作引发的任何异常都不会做到这一点,请求在执行到达 catch 块之前终止。我究竟做错了什么?
为了完整起见,该行为与我的 WebRegistry 中的以下内容相关联:
Policies
.EnrichCallsWith<JsonExceptionHandlingBehaviour>(action =>
typeof(AjaxResponse).IsAssignableFrom(action.Method.ReturnType));
AjaxResponse 看起来像:
public class AjaxResponse
{
public bool Success { get; set; }
public object Data { get; set; }
public string Exception { get; set; }
}