Я исследовал несколько вопросов по SO, но не смог найти ответ на этот вопрос. Кто знает, может быть, я нарушаю лучшие практики. Прочитав отличный ответ об использовании атрибута инжектора макета, чтобы можно было установить макет, просто указав атрибут, я решил, что я мог бы также использовать этот тип класса для атрибутов контроллеров, которые требуют аутентификации пользователя.
Итак, вместо того, чтобы проверять аутентификацию везде, я написал следующее:
// class AdminAttribute
public class AdminAttribute : LayoutInjectorAttribute
{
// ctor
public AdminAttribute()
: base("_LayoutAdmin")
{
} // eo ctor
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
WebUser user = WebApplication.CurrentUser;
if (!user.IsAuthenticated)
{
filterContext.Result = new ViewResult() { ViewName = "Unauthorised" };
filterContext.Controller.ViewData.Model = new ViewModel(WebApplication.CurrentUser.Translate("msgunauthorisedtitle"));
filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
return;
}
base.OnActionExecuting(filterContext);
} // eo OnActionExecuting
} // eo class AdminAttribute
Все работает, кроме того факта, что модель null
при обработке вида. У кого-нибудь есть идея, почему это может быть?
Страница просмотра (Unauthorised.cshtml)
@model Py2.Web.ViewModel
<h2>@Model.Title</h2>
Заранее спасибо!