Я » Я придумал несколько способов сделать это, но хочу узнать мнение сообщества. У меня такое чувство, что ответ до неприличия прост - я не боюсь выглядеть глупо (мои дети давно избавили меня от этого страха!)
Я пишу веб-службу XML REST, используя MVC2. Все типы XML, которые получат и отправят потребители веб-службы, управляются простым, но обширным XSD, и эти параметры будут связаны из xml в теле запроса с помощью настраиваемого связывателя модели по умолчанию и поставщика значений.
У меня есть хороший количество контроллеров, каждый с большим количеством методов действий (не чрезмерным - просто «хорошо»;)) - и почти в каждом случае эти методы действий будут принимать типы моделей, которые все являются ссылочными типами.
На практике в каждом случае это ' s будет ошибкой для вызывающего абонента, если он не предоставит эти значения параметров, и поэтому может быть отправлено стандартное сообщение об ошибке, например «Параметр {имя} type: {ns: type} требуется»
назад.
Я хочу иметь возможность проверять, не являются ли параметры нулевыми до того, как будет выполнен метод действия; а затем вернуть ActionResult, представляющий ошибку, клиенту (для этого у меня уже есть тип XMLResult
), при этом сам метод действия не должен проверять правильность параметров.
Итак, вместо:
public ActionResult ActionMethod(RefType model)
{
if(model == null)
return new Xml(new Error("'model' must be provided"));
}
Что-то вроде:
public ActionResult ActionMethod([NotNull]RefType model)
{
//model now guaranteed not to be null.
}
Я знаю, что это именно тот вид сквозной резки, который может быть достигнут в MVC.
Мне кажется, что либо базовый контроллер переопределил OnActionExecuting
, либо пользовательский ActionFilter - наиболее вероятный способ сделать это.
I ' d также хотел бы иметь возможность расширять систему, чтобы она автоматически выявляла ошибки проверки схемы XML (добавленные в ModelState во время привязки поставщиком настраиваемых значений), что предотвращает продолжение метода действия, если какое-либо из значений параметра не может быть загружено правильно, потому что запрос XML сформирован неправильно.