문제

재 설계를받는 대형 웹 사이트에 대한 맞춤형 404 페이지를하고 있습니다. 고객이 북마크 할 수있는 약 40 개의 고용 페이지가 있으며 새로운 사이트 구조는 이러한 북마크를 깨뜨릴 것입니다.

내 Custom 404 페이지에서는 이전 URL을 통해이 고용 페이지 중 하나로 탐색하려고하면 새 URL에 경고하고 싶습니다. 그래서 404 페이지에 몇 가지 동적 컨트롤이 있습니다. 대화 상자 유형 및 "if-so-go-Here (및 책갈피 업데이트)"대화 상자 유형의 유형. 그것은 쉬운 부분입니다.

새 URL을 제안하기 위해 요청 된 URL을보고 있습니다. 그것이 핵심 단어가 있다면, 나는 그것을 기반으로 새로운 URL을 제안 할 것입니다. 그리고 그들은 적절한 did-you-want를 발사하고 있습니다 ... 그리고 if-so ... 404에 대한 제안입니다. 위에서 언급 한 페이지.

그래서 나는이 40-ish 키/값 쌍을 저장하고 싶습니다 (키워드/새 url 쌍) 데이터 구조에서, 나는 무엇이 가장 좋을지 잘 모르겠습니다. 사전? 아이디어? 차이점은 무엇이며 어느 것이 더 적합합니까?

아니면 내가 완전히 잘못된 트랙에 있습니까?

시간 내 줘서 고마워.

도움이 되었습니까?

해결책

나는 사전을 사용할 것입니다u003CT,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;
}

사전은 괜찮을 것입니다. 404 페이지 자체 외에도 많이 전달되지 않기 때문에이 경우에는 인터페이스 유형의 유물이나 사전 자체가 그다지 중요하지 않을 것입니다.

기존 URL을 여전히 지원하기 위해 URL 재 작성을 고려해 보셨습니까?

자신의 클래스 논리를 작성한 다음 다음과 같이 목록 데이터 구조에 할당 할 수 있습니다.

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