【发布时间】:2015-02-05 04:55:46
【问题描述】:
我有以下控制器:
[NoCache]
public class AccountController : Controller
{
[Authorize(Roles = "admin,useradmin")]
public ActionResult GetUserEntitlementReport(int? userId = null)
{
var byteArray = GenerateUserEntitlementReportWorkbook(allResults);
return File(byteArray,
System.Net.Mime.MediaTypeNames.Application.Octet,
"UserEntitlementReport.xls");
}
}
public class NoCache : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
response.Cache.SetValidUntilExpires(false);
response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
response.Cache.SetCacheability(HttpCacheability.NoCache);
response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
如您所见,控制器用[NoCache] 属性修饰。
有什么方法可以防止这个属性被应用到GetUserEntitlementReport 动作上?
我知道我可以在控制器级别删除属性,但这不是我最喜欢的解决方案,因为控制器包含许多其他操作,我不想将属性单独应用于每个操作。
【问题讨论】:
-
我相信您只需将 [NoCache] 应用于各个方法,而不是将其应用于整个类。这将导致手动重复所有方法的属性,但会让您在没有它的情况下运行 GetUserEntitlementReport。
-
@amhed - 我知道该选项可用,但我正在尝试寻找替代解决方案(请参阅问题描述的最后一段)。
标签: asp.net-mvc attributes annotations