무엇 요 얘기하고있는 건 슬러그 야. 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) (문자열의 기본 열 유형)을 인덱싱 할 수 없으므로 열의 집합 길이를 정의해야합니다.
의견을 남겨주세요 !! –