0

나는 개인 블로그 인 사이트를 만들고 있습니다. 관리자 패널에 새 블로그를 입력 할 때 특정 라우팅을 지정하고 싶습니다. 일반적으로 저장하면 데이터베이스 ID와 일치합니다. 어쨌든 정적 라우팅에 대한 액세스 권한이 없습니다.Asp.Net Mvc Uniq Routing

나는 링크 매개 변수가 블로그 라우팅

기본 통해 입력 될 때 데이터베이스에 저장하려면 : 로컬 호스트 /을 ControlName/ActionName/아이디 (로컬 호스트/블로그/GetBlogs/2)

BU 내가 원하는

구함 : 로컬 호스트 /을 ControlName/ActionName/storedValue (로컬 호스트/블로그/GetBlog/Bluesky 사용) 또는 로컬 호스트/storedValue (로컬 호스트/Bluesky 사용)

답변

0

무엇 요 얘기하고있는 건 슬러그 야. URL의 일부를 구성하는 고유 한 문자열 값을 보유하려면 블로그 클래스에 속성을 추가하기 만하면됩니다. 예를 들어 블로그를 만들 때

[Index] 
[StringLength(80)] 
public string Slug { get; set; } 

그런 다음, 당신은 수동으로 (그 형태의 필드 만들기) 또는 블로그 또는 무언가의 "slugifying"는 제목을 구성 Slug에 대한 값을 지정합니다. 예를 들어, 당신은 같은 것을 할 수있는, 그런

public static string RemoveDiacritics(this string s) 
{ 
    s = s ?? string.Empty; 
    if (s.Length > 0) 
    { 
     char[] chars = new char[s.Length]; 
     int charIndex = 0; 

     s = s.Normalize(NormalizationForm.FormD); 
     for (int i = 0; i < s.Length; i++) 
     { 
      char c = s[i]; 
      if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark) 
       chars[charIndex++] = c; 
     } 

     return new string(chars, 0, charIndex).Normalize(NormalizationForm.FormC); 
    } 

    return s; 
} 

public static string Slugify(this string s, int maxLength = 80) 
{ 
    s = s ?? string.Empty; 
    //First to lower case 
    s = s.ToLowerInvariant().RemoveDiacritics(); 
    //Replace spaces 
    s = Regex.Replace(s, @"\s", "-", RegexOptions.Compiled); 
    //Remove invalid chars 
    s = Regex.Replace(s, @"[^a-z0-9s\-_]", "", RegexOptions.Compiled); 
    //Trim dashes from end 
    s = s.Trim('-', '_'); 
    //Replace double occurences of - or _ 
    s = Regex.Replace(s, @"([\-_]){2,}", "$1", RegexOptions.Compiled); 

    while (s.Length > maxLength) 
    { 
     var pieces = s.Split('-'); 
     pieces = pieces.Take(pieces.Count() - 1).ToArray(); 
     s = string.Join("-", pieces); 
    } 

    return s; 
} 

: 나는 다음과 같은 문자열 확장을 사용하면 슬러그를 만들 그러나

blog.Slug = blog.Title.Slugify(); 

, 당신은 다음 조회하기 위해 URL의 PARAM를 사용합니다을 그에 의해 블로그는 다음 Slug 속성이 위의 [Index] 장식 이유

public ActionResult GetBlog(string slug) 
{ 
    var blog = db.Blogs.SingleOrDefault(m => m.Slug == slug); 

이다. 이렇게하면 EF는 테이블을 만들거나 열을 추가 할 때 열의 색인을 만듭니다. 쿼리하려는 열은 성능상의 이유로 인덱스되어야합니다. 또한 NVARCHAR (MAX) (문자열의 기본 열 유형)을 인덱싱 할 수 없으므로 열의 집합 길이를 정의해야합니다.

+0

의견을 남겨주세요 !! –