Здравствуйте, 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);
}
}