我正在为正在进行重新设计的大型网站进行自定义404页面。客户可能已将大约40个高使用率页面加入书签,我们的新网站结构将破坏这些书签。
在我的自定义404页面上,如果他们尝试通过旧网址导航到其中一个高使用率网页,我想提醒他们注意新网址。所以我在404页面上有几个动态控件,一个用于“你想要这个吗?”对话框的类型,另一个用于“if-so-go-here(并更新您的书签)”类型的对话框。这很容易。
要建议新网址,我正在查看请求的网址。如果它中有关键词,我将基于此建议新的URL,而我们正在解雇你想要的相应的......,如果是的话......关于404的建议如上所述的页面。
所以我想在数据结构中存储这些40-keyh键/值对( keyword / new-URL pair ),我不确定什么是最好的。字典? IDictionary的?有什么区别,哪个更合适?
还是我完全走错了路?
感谢您的时间。
答案 0 :(得分:4)
我会使用字典< T,T>来自System.Collections.Generic命名空间。
答案 1 :(得分:2)
您可以使用NameValueCollection。
答案 2 :(得分:2)
对于您的用例,这可能有点过分,但我可能允许每个Uri使用多个关键字,以及相对权重分数。然后,动态评分匹配的关键字。
class UriSuggester {
private List<SuggestedUri> Uris { get; set; }
Uri[] GetSuggestions(Uri originalUri) {
var suggestionHits = new Dictionary<SuggestedUri, int>();
foreach (var keyword in KeyWords.Parse(originalUri)) {
// find suggestions matching that keyword
foreach (var suggestedUri in Uris.Where(u => u.Keywords.Contains(keyword)) {
// add a hit for keyword match
suggestionHits[suggestedUri] += 1;
}
}
// order by weight * hits
return suggestionHits.Keys
.OrderBy(s => s.Weight * suggestionHits[s])
.Select(s => s.Uri)
.ToArray();
}
}
class SuggestedUri {
public Uri Suggested { get; set; }
public int Weight { get; set; }
public Keyword[] Keywords;
}
class Keyword {
public string Value { get; set; }
public static Keyword[] Parse(Uri uri);
override Equals;
override GetHashCode;
}
答案 3 :(得分:1)
字典会好的。你把它存储为接口类型IDictionary或者字典本身在这种情况下并不重要,因为除了在404页面本身之外它不会被传递太多。
您是否考虑过进行一些网址重写以支持旧网址?
答案 4 :(得分:1)
您可以考虑编写自己的类逻辑,然后将其分配给List数据结构,如下所示:
public class KeyValuesClass
{
private string a_key;
private string a_value;
public KeyValuesClass(string a_key, string a_value)
{
this.a_key = a_key;
this.a_value = a_value;
}
public string Key
{
get{ return a_key; }
set { a_key = value; }
}
public string Value
{
get{ return a_value; }
set { a_value = value; }
}
}
代码中的某个地方
List<KeyValuesClass> my_key_value_list = new List<KeyValuesClass>();
my_key_value_list.Add(new KeyValuesClass("key", "value");
但是您可以将Dictionary视为我们的同事程序员在上面提到的:)