سؤال

أقوم بعمل صفحة مخصصة من 404 لموقع ويب كبير يخضع لإعادة تصميم. هناك حوالي 40 صفحة عالية الاستخدام قد يكون العملاء قد تم وضعها مرجعية ، وسيقوم بنية الموقع الجديدة بتكسير هذه الإشارات المرجعية.

في صفحة 404 المخصصة الخاصة بي ، أريد تنبيههم إلى عنوان URL الجديد إذا حاولوا التنقل إلى واحدة من هذه الصفحات عالية الاستخدام عبر عنوان URL القديم. لذلك لديّ بعض عناصر التحكم الديناميكية على صفحة 404 ، واحدة لـ "هل أنت-هذا؟" نوع الحوار ، وآخر لنوع الحوار "if-go-go-here (وتحديث المرجعية الخاصة بك). هذا هو الجزء السهل.

لاقتراح عنوان URL جديد ، أنا أنظر إلى عنوان URL المطلوب. إذا كانت تحتوي على كلمات رئيسية فيه ، فسوف أقترح عنوان URL الجديد بناءً على ذلك ، وأنا أطلق النار على الاقتراحات المناسبة ... و IF-SO ... صفحة كما ذكر أعلاه.

لذلك أريد تخزين أزواج المفتاح/القيمة الأربعين (الكلمة الرئيسية/أزواج url الجديدة) في بنية البيانات ، ولست متأكدًا مما سيكون أفضل. قاموس؟ المعرف؟ ما هو الفرق وما هو أكثر ملاءمة؟

أم أنا تماما على المسار الخطأ؟

شكرا على وقتك.

هل كانت مفيدة؟

المحلول

أود استخدام القاموسu003CT,T> من System.Collections.generic مساحة الاسم.

نصائح أخرى

You could use NameValueCollection.

Maybe this is overkill for your use case, but I'd probably allow for multiple keywords per Uri, and a relative weight score. Then, dynamically score the keywords that match.

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

Dictionary would be fine. Wether you store it as the interface type IDictionary or Dictionary itself wouldn't matter much in this case as it's not going to be passed much around, besides on the 404 page itself.

Have you considered doing some URL rewriting to still support the old URLs?

You can consider writing your own class logic and then assign that to a List data structure as following:

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

}

somewhere in the code

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

But you can consider Dictionary as our fellow programmer mentioned it above :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top