【问题标题】:Exchange Properties between Actions in Controller在控制器中的操作之间交换属性
【发布时间】:2016-04-22 12:52:46
【问题描述】:

我问a similar question,答案是我根本不需要这样做。虽然这对于该方法是正确的,但这对我没有帮助。

我有以下操作:

[MyCaching]
[MyUserAuth]
public class MyMagicController:Controller {
   public ActionResult GetLoans() {
      return GetLoansForThisUser();
   }
}

MyUserAuth 是一个属性,用于检查用户是否有权获取数据。此信息是从数据库中检索的,不能(纯粹)通过 HttpContext 检索。一些用户是管理员,他们应该看到更多。

如果用户具有正常访问权限(如 90% 的用户),[MyCaching] 中的缓存机制应该启动 - 属性应该从缓存返回内容。

如果是Administrator,Cache不应该返回不填充,因为内容不一样。

所以我需要找到一种方法让[MyUserAuth] 告诉[MyCaching] 该信息。有没有直接的方法来实现这一目标? 如果没有,我可以为此“滥用”HttpContext 吗?例如:

public class MyAuthAttribute:AuthenticationAttribute
    // ...
    public void CheckPermissions(HttpContext context) {
        context.Items.Add("isAdmin",true);
    }
}

public class MyCachingAttribute:ActionAttribute {
    // ...
    public void GetCache(HttpContext context) {
        if (context.Items["isAdmin"]) {
            return // dontcache;
        }
    }
}

然后将MyUserAuth 放在MyCaching 之前?

【问题讨论】:

  • 为什么不能在身份验证时设置角色/声明 isAdmin?然后你可以在 MyCaching 中检查它

标签: c# asp.net asp.net-mvc attributes httpcontext


【解决方案1】:

您可以在身份验证中设置角色或声明“isAdmin”,您可以通过 HttpContext 在 MyCaching 中进行检查

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 2010-10-25
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多