2008-10-19 107 views
3

我正在爲正在重新設計的大型網站做一個自定義404頁面。客戶可能已經收藏了大約40個高用量頁面,而我們的新網站結構將打破這些書籤。ASP.NET鍵/值列表

在我的自定義404頁面上,如果他們嘗試通過其舊URL導航到其中一個高度使用的頁面,我想提醒他們新的URL。所以我在404頁面上有幾個動態控件,一個用於「你想要這個嗎?」類型的對話框,另一個用於「如果這麼想去(在這裏更新書籤)」類型的對話框。這是很容易的部分。

要提出一個新的URL,我正在查看請求的URL。如果它包含關鍵詞,我將根據這個建議新的URL,並且我正在解僱你想要的合適的......,如果......那麼......關於404的建議如上所述。

因此,我想將這些40個關鍵字/值對(關鍵字/新網址對)存儲在數據結構中,我不確定最好。字典? IDictionary的?有什麼區別,哪個更合適?

還是我完全在錯誤的軌道上?

謝謝你的時間。

回答

4

我會使用System.Collections.Generic命名空間中的字典< T,T >。

2

您可以使用NameValueCollection。

1

字典將會很好。將它存儲爲接口類型的IDictionary或Dictionary本身在這種情況下並不重要,因爲除了404頁面本身之外,它不會被傳遞太多。

你有沒有考慮做一些URL重寫,仍然支持舊的URL?

1

你可以考慮寫自己的類邏輯,然後賦值給一個列表數據結構如下:

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"); 

的地方,但你可以考慮解釋爲我們的同胞程序員在上面提到它:)

+0

爲什麼你會在框架提供完美的通用版本時創建自己的KeyValuePair類? – 2008-10-19 21:47:33

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; 
}