Question

Je crée une page 404 personnalisée pour un site Web volumineux en cours de refonte. Les clients peuvent avoir mis en signet environ 40 pages à utilisation intensive, et notre nouvelle structure de site supprimera ces signets.

Sur ma page 404 personnalisée, je souhaite les avertir de la nouvelle URL s'ils tentent de naviguer vers l'une de ces pages très utilisées via son ancienne URL. J'ai donc quelques commandes dynamiques sur la page 404, une pour un & «Avez-vous-voulez-cela? &»; type de dialogue, et un autre pour un " if-so-so-go-here (et mettre à jour votre signet) " type de dialogue. C'est la partie facile.

Pour suggérer une nouvelle URL, je regarde l'URL demandée. S'il y a des mots clés, je vais suggérer la nouvelle URL en fonction de cela, et je vais les renvoyer au bon moment, et si oui ... des suggestions sur le 404 page comme mentionné ci-dessus.

Je souhaite donc stocker ces paires de 40 clés / valeur ( mot-clé / nouvelle-URL ) dans une structure de données, et je ne suis pas sûr de ce qui conviendrait le mieux. Dictionnaire? IDictionary? Quelle est la différence et quelle est la plus appropriée?

Ou suis-je totalement sur la mauvaise voie?

Merci de votre temps.

Était-ce utile?

La solution

Je voudrais utiliser le dictionnaire < T, T > à partir de l'espace de noms System.Collections.Generic.

Autres conseils

Vous pouvez utiliser NameValueCollection.

C’est peut-être excessif pour votre cas d’utilisation, mais j’autoriserais probablement plusieurs mots-clés par Uri et un score de pondération relative. Ensuite, notez dynamiquement les mots-clés correspondants.

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

Dictionnaire serait bien. Que vous le stockiez sous le type d’interface IDictionary ou Dictionnaire lui-même n’aurait pas beaucoup d’importance dans ce cas car il ne sera pas transmis beaucoup, en plus de la page 404 elle-même.

Avez-vous envisagé de réécrire certaines URL pour prendre en charge les anciennes URL?

Vous pouvez envisager d'écrire votre propre logique de classe, puis l'affecter à une structure de données List comme suit:

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

}

quelque part dans le code

List<KeyValuesClass> my_key_value_list = new List<KeyValuesClass>();
my_key_value_list.Add(new KeyValuesClass("key", "value");

Mais vous pouvez considérer Dictionary comme notre collègue le mentionne plus haut:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top