При использовании.NET 3.5 можно использовать HashSet
. Это верно, что.NET не обслуживает наборы, а также Java делает все же.
Wintellect PowerCollections может помочь также.
Я думаю, что вы можете создать VaryByCustom = "scheme" и добавить это в свой файл Global.asax.cs (включая пару других, которые я использую, а также версию приложения и пользователя):
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("version", StringComparison.CurrentCultureIgnoreCase))
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] parts = asm.FullName.Split(',');
string version = parts[1].Trim().ToLower();
return version;
}
else if (custom.Equals("user", StringComparison.CurrentCultureIgnoreCase))
{
var user = Membership.Users.CurrentUser;
return null == user ? string.Empty : user.Id.ToString();
}
else if (custom.Equals("scheme", StringComparison.CurrentCultureIgnoreCase))
{
var scheme = context.Request.IsSecureConnection ? "https" : "http";
return scheme;
}
else
return base.GetVaryByCustomString(context, custom);
}
Я никогда не пробовал, но вы могли бы использовать свойство Outputcache VaryByHeader и заголовок «host», который указывает хост в Интернете и номер порта запрашиваемого ресурса.
У меня возникает вопрос: почему вы перенаправляете на страницу A через безопасное соединение после страницы B. Если это незащищенная страница, не могли бы вы исправить перенаправление PageB, чтобы всегда перенаправлять на небезопасную.
Это не отвечает на вопрос в том виде, в котором он сформулирован, но может избавить вас от необходимости варьироваться в зависимости от схемы. Если вы жестко кодируете "http: //" для URL-адресов Scene7, вы можете изменить их на URL-адреса, относящиеся к схеме.
<img src="http://site.scene7.com/images/someimage.jpg" />
=>
<img src="//site.scene7.com/images/someimage.jpg" />
Это заставит браузер автоматически запрашивать ресурс с той же схемой, что и ссылающаяся страница. Это, конечно, при условии, что у вас есть сертификат SSL для вашего домена scene7.