it's easy. only it is better to use constants as digits. You need:
/// <summary>
///
/// </summary>
public class NotFoundException : Exception
{
/// <summary>
/// Сообщение об ошибке
/// </summary>
/// <param name="message"></param>
public NotFoundException(string message, int? codeAction=null) : base(message)
{
CodeAction = codeAction;
}
public int? CodeAction { get; set; }
}
when intercept an error :
public class ErrorsFilterAttribute : ExceptionFilterAttribute, IAutofacExceptionFilter
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var errorMessage = new ErrorMessage(actionExecutedContext.Exception.Message, HttpStatusCode.InternalServerError);
if (actionExecutedContext.Exception is NotFoundException)
{
errorMessage.ErrorCode = (int)HttpStatusCode.NotFound;
isWarning = true;
errorMessage.CodeAction = ((NotFoundException) actionExecutedContext.Exception).CodeAction;
}
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse((HttpStatusCode)errorMessage.ErrorCode, errorMessage);
}
}
errorMessage it's my return class
/// <summary>
/// HTTP Code
/// </summary>
public int ErrorCode { get; set; }
/// <summary>
/// коде ошибки внутри сервиса
/// </summary>
public int? CodeAction { get; set; }
simple errors
{ "errorCode": 400, "codeAction": 2, "errors": {
"error": "bad values!" }}