1.我需要爲OutputCache屬性使用VaryByCustom選項?
我想這是最好的版本。請參閱here on SO或in this blog。
2.我應該如何爲具有相同權限集的哈希表創建唯一鍵(可以按不同的順序添加到哈希集)?
要構建的緩存鍵,我已經使用在過去的一些類似的(使用a GetHashCode實現):
public class Permission
{
public Guid Id { get; set; }
public string Name { get; set; }
public override int GetHashCode() { return this.Id.GetHashCode(); }
}
public static string BuildCacheKey(HashSet<Permission> permissions)
{
var hashCode = GetHashCode(permissions);
return string.Format(CultureInfo.InvariantCulture, "permission_{0}", hashCode);
}
private static int GetHashCode(IEnumerable<Permission> permissions)
{
unchecked
{
var hash = 17;
foreach (var permission in permissions.OrderBy(p => p.Id))
{
hash = hash * 23 + permission.GetHashCode();
}
return hash;
}
}
這應該與一些權限恕我直言工作。如果您只有一些權限組合並且不需要太複雜的權限名稱,那麼也可以將這些名稱連接起來。
public static string BuildCacheKey(HashSet<Permission> permissions)
{
var builder = new StringBuilder("permission_");
foreach (var permission in permissions.OrderBy(p => p.Name))
{
builder.Append(permission.Name);
}
return builder.ToString();
}
是的,我可以排序/重新排序。哈希集仍然是一組特權對象,我如何生成緩存鍵 - 哈希碼? – EagerToLearn 2012-03-27 19:53:53
@EagerToLearn我認爲這種策略可能取決於普通用戶擁有多少特權(總共)。幾個或幾百? – hangy 2012-03-27 20:05:05