Какое системное исключение для неверного запроса - PullRequest
0 голосов
/ 05 мая 2020

У меня есть API-контроллер, который вызывает класс обслуживания. Внутри класса обслуживания я хочу вызвать исключение, чтобы API-контроллер мог его поймать и вернуть ответ Http-BadRequest. Но какое исключение равно Bad Request? И что лучше всего подходит для этой ситуации?

1 Ответ

1 голос
/ 05 мая 2020

Я использовал этот шаблон для генерации исключений на уровне приложения, и уровень api распознавал код состояния http:

Определение исключений:

public class BadRequestException : Exception
{
    public BadRequestException(string message = null)
        : base(message == null ? "Bad Request" : message)
    { }
}

public class ActionInputIsNotValidException : BadRequestException
{
    public ActionInputIsNotValidException()
        : base("Action input is not valid")
    { }
}

Фильтр действий для обработки исключений на уровне api:

public class ExceptionActionFilter : ExceptionFilterAttribute
{
    public ExceptionActionFilter()
    {
    }

    public override void OnException(ExceptionContext context)
    {
        context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        context.HttpContext.Response.ContentType = "application/json";

        if (isTypeOf(context.Exception, typeof(Exceptions.BadRequestException)))
        {
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
        }

        context.Result = new JsonResult(new
        {
            Message = context.Exception.Message,
        });
    }

    private bool isTypeOf(Exception exception, Type baseType)
    {
        return exception.GetType() == baseType || exception.GetType().IsSubclassOf(baseType);
    }
}

Затем на уровне приложения мы можем генерировать исключения, и результатом вызова api будет json, содержащее сообщение об ошибке с кодом состояния http 400:

throw new ActionInputIsNotValidException();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...