Как я могу создать поведение 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; }
}