Asp.net mvc ASP.NET MVC:在重定向和抛出HttpException时不执行actionfilters

Asp.net mvc ASP.NET MVC:在重定向和抛出HttpException时不执行actionfilters,asp.net-mvc,redirect,action-filter,Asp.net Mvc,Redirect,Action Filter,我创建了一个OnActionExecuted过滤器,用db中的数据填充一些viewmodel属性(我不使用ViewData[“somekey”],更喜欢使用从一个共同祖先降下来的许多ViewModels) 问题在于,当某个操作导致重定向或404错误时,OnActionExecuted会尝试访问尚未初始化的ViewModel。另外,填充这些值是完全无用的,因为它们不会被使用,因为将调用另一个操作 如何避免在重定向时填充ViewModel?一个简单的解决方案是在模型不存在时不填充模型: ViewMo

我创建了一个OnActionExecuted过滤器,用db中的数据填充一些viewmodel属性(我不使用ViewData[“somekey”],更喜欢使用从一个共同祖先降下来的许多ViewModels)

问题在于,当某个操作导致重定向或404错误时,OnActionExecuted会尝试访问尚未初始化的ViewModel。另外,填充这些值是完全无用的,因为它们不会被使用,因为将调用另一个操作


如何避免在重定向时填充ViewModel?

一个简单的解决方案是在模型不存在时不填充模型:

ViewModel model = ViewData.Model as ViewModel;
if (model != null)
{    
    model.IsUserAuthenticated = filterContext.HttpContext.User.Identity.IsAuthenticated;
    if (model.IsUserAuthenticated)
    {
        model.UserName = filterContext.HttpContext.User.Identity.Name;
    }
    model.CommonAttribute = from c in context.Something select new SomethingElse() {...};
}
ViewModel model = ViewData.Model as ViewModel;
if (model != null)
{    
    model.IsUserAuthenticated = filterContext.HttpContext.User.Identity.IsAuthenticated;
    if (model.IsUserAuthenticated)
    {
        model.UserName = filterContext.HttpContext.User.Identity.Name;
    }
    model.CommonAttribute = from c in context.Something select new SomethingElse() {...};
}