0

나는 ASP.NET MVC 4 응용 프로그램을 개발 그리고 난 싶어요 Global.asax의 패턴 :ASP.NET MVC 페르시아 친화적 인 URL을

routes.MapRoute(
       name:"ViewProduct", 
       url:"Product/Category/{Id}/{productName}", 
       defaults: new { controller = "Product", action = "Category", id = UrlParameter.Optional, productName = "" } 
      ); 

내보기에 나는이 방법을 내 URL을 생성 사용하고 있습니다 :

<a href="/Product/Category/@item.Id/@Url.ToFriendlyUrl(item.Name)">@item.Name</a> 

위의 방법
public static string ToFriendlyUrl(this UrlHelper helper, 
      string urlToEncode) 
     { 
      urlToEncode = (urlToEncode ?? "").Trim().ToLower(); 

      StringBuilder url = new StringBuilder(); 

      foreach (char ch in urlToEncode) 
      { 
       switch (ch) 
       { 
        case ' ': 
         url.Append('-'); 
         break; 
        case '&': 
         url.Append("and"); 
         break; 
        case '\'': 
         break; 
        default: 
         if ((ch >= '0' && ch <= '9') || 
          (ch >= 'a' && ch <= 'z')) 
         { 
          url.Append(ch); 
         } 
         else 
         { 
          url.Append('-'); 
         } 
         break; 
       } 
      } 

      return url.ToString(); 
     } 

영어의 URL (제품 이름의 세그먼트)에 대해 올바르게 작동합니다 : 당신은 내가 확장 방법은 ToFriendlyUrl라는 만들거야 볼 수 있습니다

http://www.mysite.com/Product/Category/3/category-type-one 

하지만, 페르시아어 URL에 나는 예를 들어,이 URL을 받고 있어요 :

http://www.mysite.com/Product/Category/1/-------------- 

예 번째가 있어야 할 :

페르시아어 URL을 사용하도록 코드를 변경하려면 어떻게해야합니까?

PS : 나는 우리가 하부 및 상부 케이스가없는 페르시아어 알고있는 나는이 코드 줄 생략 :

urlToEncode = (urlToEncode ?? "").Trim().ToLower(); 

을하지만 여전히 나는 같은 문제를했습니다.

   if ((ch >= '0' && ch <= '9') || 
        (ch >= 'a' && ch <= 'z')) 

는 영어의 숫자를 의미하고, 문자가 허용되는 경우

감사

답변

2

이.

public static bool ContainsFarsi(string txt) 
     { 
      return !string.IsNullOrEmpty(txt) && 
        Regex.IsMatch(txt, @"[\u0600-\u06FF]"); 
     } 

+ 이 ToFriendlyUrl 방법 것을 사용하지 마십시오하지만 페르시아어 문자는 다른 범위가 있습니다. 확장 방법을 만들어 필터링을 적용한 다음 표준 Html.ActionLink 메서드를 사용하고 매개 변수를 new route values으로 전달하거나 T4MVC HTML 도우미 메서드를 사용하는 것이 좋습니다. 링크를 수동으로 구성하면 현재 도메인 또는 하위 도메인을 기반으로 루트 경로를 조정하고 특수 문자 및 많은 외부 기본 기능을 인코딩하는 등의 많은 기능을 잃게됩니다.

+0

고마워요, 거기에 (예 : 링크를 수동으로 구성하는) 모든 예제가 있습니까? 예를 들어 웹 사이트에서 이러한 유형의 URL을 어떻게 처리합니까? –

+1

이것은 표준 Html.ActionLink 메소드 + 페르시아 문자를 정규화하는 확장 메소드입니다. 당신은 여기에'ToSeoUrl' 메서드를 찾을 수 있습니다 : http://www.dotnettips.info/post/894 – VahidN

+0

덕분에, 당신의 메서드를 사용하고 있습니다. 그러나 다음과 같은 Action 메서드를 사용할 때 문제가 있습니다 :'@ Html.ActionLink (항목 : 이름, actionName : "카테고리", 컨트롤러 이름 : "제품", routeValues ​​: new {id = item.Id, productName = item.Name.ToSeoUrl()}, htmlAttributes : null)'내 URL은 다음과 같습니다./Product/Category/2? productName = دربهای چوبی'/ Product/Category/2/دربهای-چوبی'을 어떻게 가질 수 있습니까? –