Вопрос

Я делаю пользовательскую страницу 404 для большого сайта, который подвергается редизайну. Существует около 40 страниц с высоким уровнем использования, которые клиенты могут добавить в закладки, и наша новая структура сайта сломает эти закладки.

На моей пользовательской странице 404 я хочу предупредить их о новом URL-адресе, если они попытаются перейти на одну из этих популярных страниц по ее старому URL-адресу. Итак, у меня есть пара динамических элементов управления на странице 404, один для & Quot; did-you-want-this? & Quot; тип диалога и другой для " if-so-go-here (и обновите вашу закладку) " тип диалога. Это легкая часть.

Чтобы предложить новый URL, я просматриваю запрашиваемый URL. Если в нем есть ключевые слова, я собираюсь предложить новый URL, основанный на этом, и на них я запускаю соответствующие предложения "сделал, что ты хочешь ...", и если это так ... на 404 страница, как указано выше.

Итак, я хочу сохранить эти 40-ключовые пары ключ / значение ( пары ключевое слово / новый-URL ) в структуре данных, и я не уверен, что будет лучше. Толковый словарь? IDictionary? Какая разница и что более уместно?

Или я совершенно не на том пути?

Спасибо за ваше время.

Это было полезно?

Решение

Я бы использовал словарь < T, T > из пространства имен System.Collections.Generic.

Другие советы

Вы можете использовать NameValueCollection.

Может быть, это излишне для вашего случая использования, но я бы, вероятно, учел несколько ключевых слов на 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;
}

Словарь будет хорошо. Вне зависимости от того, сохраните ли вы его как интерфейсный тип IDictionary или сам словарь, в этом случае не будет иметь большого значения, так как он не будет широко распространяться, кроме как на самой странице 404.

Рассматривали ли вы переписывание URL-адресов для поддержки старых URL-адресов?

Вы можете написать свою собственную логику класса, а затем назначить ее структуре данных 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");

Но вы можете рассматривать словарь так, как наш коллега-программист упомянул это выше:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top