我正在使用ASP.NET MVC 4开发一个应用程序,我希望我的URL看起来如下:
http://www.mysite.com/Product/Category/2/دربهای-چوبی
这样做我在Global.asax
中使用这种网址格式:
routes.MapRoute(
name:"ViewProduct",
url:"Product/Category/{Id}/{productName}",
defaults: new { controller = "Product", action = "Category", id = UrlParameter.Optional, productName = "" }
);
在我看来,我正在使用这种方式生成我的网址:
<a href="/Product/Category/@item.Id/@Url.ToFriendlyUrl(item.Name)">@item.Name</a>
正如您所见,我正在创建名为ToFriendlyUrl
的扩展方法:
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();
}
以上方式适用于英文网址(productName的细分):
http://www.mysite.com/Product/Category/3/category-type-one
但是对于波斯语网址我正在获取此网址,例如:
http://www.mysite.com/Product/Category/1/--------------
例如第二个应该是:
http://www.mysite.com/Product/Category/2/دربهای-چوبی
如何更改代码以使用波斯语网址?
PS :我知道在波斯语中我们没有大写和小写,我省略了这行代码:
urlToEncode = (urlToEncode ?? "").Trim().ToLower();
但我仍然有同样的问题。
感谢
答案 0 :(得分:2)
如果
if ((ch >= '0' && ch <= '9') ||
(ch >= 'a' && ch <= 'z'))
表示只允许使用英文数字和字符。但波斯人物有不同的范围:
public static bool ContainsFarsi(string txt)
{
return !string.IsNullOrEmpty(txt) &&
Regex.IsMatch(txt, @"[\u0600-\u06FF]");
}
+
不要使用ToFriendlyUrl
方法。创建一个扩展方法以应用过滤,然后使用标准Html.ActionLink
方法并将参数传递为new route values
,或者最好使用T4MVC HTML帮助程序方法。
通过手动构建链接,您将失去许多功能,例如根据当前域或子域调整根路径,以及编码特殊字符和许多外部内置功能。</ p>