Я бы так подумал
Фильтр действий подойдет для проверки входных данных.
Например,
EHR ehr = ehrRepository.FindById(ehrId);
if (ehr.UserName != User.Identity.Name)
return View("Invalid Owner");
Подойдет дляПоместив в фильтр действий, я создал другую проверку входных данных, как в [Требуется вход в систему] или [Требуется SSL] в прошлом, чтобы несколько действий могли использовать один и тот же код (onBeforeExcuting или onAfterExecuted).
Аспектно-ориентированное программирование для сквозных задач
Однако в других аспектах, таких как ведение журналов, являющихся сквозными задачами для всех уровней вашей архитектуры, вы можете захотеть взглянуть на AOP (Аспектно-ориентированное программирование), чтобы избежатьдублирование кода там.
Обновление - Пример кода (не проверено)
public class CheckValidUserAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
IMyRepository myRepository = IoC.Resolve<IMyRepository>();
Int64 userId;
if(Int64.TryParse(filterContext.HttpContext.Request.QueryString["id"]), out userId))
if(!IsValidUser(userId))
filterContext.Result = new InvalidUserResult();
}
public bool IsValidUser(IMyRepository myRepository, Int64 userId)
{
EHR ehr = ehrRepository.FindById(ehrId);
return ehr != null && ehr.UserName == User.Identity.Name;
}
}
Что-то вродевышеописанное должно сделать это, вам нужно создать именованное представление, чтобы вернуть вашего «Недопустимого пользователя», однако это должно быть тривиально.В сети должно быть много примеров того, как создавать и использовать фильтры действий.Лично я учился у Pro ASP.NET MVC Framework и