public virtual void OnExceptionTypeFilter(Exception ex, ResponseStatus responseStatus)
{
var argEx = ex as ArgumentException;
var isValidationSummaryEx = argEx is ValidationException;
if (argEx != null && !isValidationSummaryEx && argEx.ParamName != null)
{
var paramMsgIndex = argEx.Message.LastIndexOf("Parameter name:", StringComparison.Ordinal);
var errorMsg = paramMsgIndex > 0
? argEx.Message.Substring(0, paramMsgIndex)
: argEx.Message;
if (responseStatus.Errors == null)
responseStatus.Errors = new List<ResponseError>();
responseStatus.Errors.Add(new ResponseError
{
ErrorCode = ex.GetType().Name,
FieldName = argEx.ParamName,
Message = errorMsg,
});
return;
}
var serializationEx = ex as SerializationException;
var errors = serializationEx?.Data["errors"] as List<RequestBindingError>;
if (errors != null)
{
if (responseStatus.Errors == null)
responseStatus.Errors = new List<ResponseError>();
responseStatus.Errors = errors.Select(e => new ResponseError
{
ErrorCode = ex.GetType().Name,
FieldName = e.PropertyName,
Message = e.PropertyValueString != null
? $"'{e.PropertyValueString}' is an Invalid value for '{e.PropertyName}'"
: $"Invalid Value for '{e.PropertyName}'"
}).ToList();
}
}