Re[2]: обработка ошибок
От: MadHuman Россия  
Дата: 07.04.22 17:29
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, MadHuman, Вы писали:

MH>>кейс. есть функция GetThing, внутри проверяется её аргумент на валидность. если что не так — генерится ArgumentException (AE). пока всё ок.
MH>>теперь её надо заюзать например внутри хандлера рест-апи ендпойнта. хочется чтоб если извне пришедший аргумент для неё кривой — вернуть 400.
S>Так делать не надо.
S>400 означает, что неверны не вообще любые аргументы чего угодно, а конкретно аргументы, переданные клиентом.
ну да. кейс как раз и такой. клиент передал неверное значение аргумента.

S>То есть хэндлер рест-апи должен проверить аргументы, и только если они в порядке, ехать дальше.

необязательно. задачу по проверке аргумента можно делегировать GetThing (т.к. она там внутри лучше знает что и как проверять).
вопрос в том как это лучше обработать. дублировать в хэндлере логику проверки плохо, вынести код проверки аргумента из GetThing в отдельную функцайку
и в хэндлере её дернуть — можно, но ... нехотелось бы.


S>Покажите ваш код контроллера, который хэндлит рест апи. Какое место там занимает GetThing?

кода нет, я думаю как его написать. примерно так

//рабочая функция. размещена в другом месте от хэндлера
public static object GetThing(string arg1){

  if ( some condition for arg1) {
     throw new ArgumentException("arg1 invalid");
  }
  //do work
}


//хэндлер для апи ендпойнта
public static object ProcApiRequest(string arg1, string arg2){

  try {
     var result1 = GetThing(arg1);
     var result2 = DoSomeOtherWork(result1);
     return MakeOutPut(result2);
  } catch (ArgumentException ae){
     return new HttpError(400, ae.Message); 
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.