Frage

Ich mache eine benutzerdefinierte 404-Seite für eine große Website, die einen Redesign ist unterziehen. Es gibt etwa 40 hochfrequentierte Seiten, die Kunden vorgemerkt haben, und unsere neue Struktur werden diese Lesezeichen brechen.

Auf meiner benutzerdefinierten 404-Seite, möchte ich sie auf die neue URL warnen, wenn sie auf einen dieser hochfrequentierte Seiten über seine alte URL zu navigieren versuchen. Also ich habe ein paar dynamische Steuerelemente auf der Seite 404, eine für eine „tat-you-want-das?“ Art von Dialog und eine andere für eine „if-so-go-hier (und aktualisieren Sie Ihr Lesezeichen)“ Art des Dialogs. Das ist der einfache Teil.

Um eine neue URL vorschlagen, ich bin auf der angeforderten URL suchen. Wenn es Schlüsselwörter in ihm hat, werde ich die neue URL vorschlagen auf dieser Grundlage, und ihnen, ich bin der entsprechenden tat-you-want ... abzufeuern, und wenn-so ... Vorschläge auf die 404 Seite, wie oben erwähnt.

Also habe ich diese 40-ish Schlüssel / Wert-Paare gespeichert werden sollen ( Schlüsselwort / new-URL-Paare ) in einer Datenstruktur, und ich bin nicht sicher, was das Beste wäre. Wörterbuch? IDictionary? Was ist der Unterschied und die besser geeignet ist?

Oder bin ich völlig auf dem Holzweg?

Vielen Dank für Ihre Zeit.

War es hilfreich?

Lösung

Ich würde das Wörterbuch verwenden vom System.Collections.Generic Namespace.

Andere Tipps

Sie können Namevaluecollection verwenden.

Vielleicht ist das viel des Guten für Ihren Anwendungsfall, aber ich würde wahrscheinlich für mehrere Keywords pro Uri, und einem relativen Gewichts Punktzahl ermöglichen. Dann dynamisch die Schlüsselwörter punkten, die übereinstimmen.

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

Wörterbuch wäre in Ordnung. Ob Sie speichern es als Schnittstelle Typ IDictionary oder Wörterbuch würde sich nicht viel in diesem Fall, es wird nicht viel herumgereicht werden, außer auf der 404-Seite selbst.

Haben Sie darüber nachgedacht, eine URL tun Umschreiben noch die alten URLs unterstützen?

Sie können betrachten Sie Ihre eigene Klasse Logik zu schreiben und dann, dass folgend auf eine Listendatenstruktur zuordnen:

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

}

irgendwo im Code

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

Sie können aber Wörterbuch betrachten, wie unsere Kolleginnen und Programmierer oben erwähnt:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top