Asp.net mvc 处理'/';链接中的链接

Asp.net mvc 处理'/';链接中的链接,asp.net-mvc,string,hyperlink,Asp.net Mvc,String,Hyperlink,我正在读一些字符串,这些字符串中有/,最常见的例子是日期/数字,如05/06、07/08等 我正在使用ASP.NET MVC2,并通过从DB读取的这些字符串生成链接,这就是问题所在 显然,链接到: www.mysite.com/yearperiod/05/06/detail 将不会与指向的链接相同 www.mysite.com/yearperiod/2005/detail 解决这个问题的好办法是什么?我的第一个想法是将每个/转换为-,但随后我遇到了一个问题/开销,即必须跟踪哪些代码被转换,以便在

我正在读一些字符串,这些字符串中有
/
,最常见的例子是日期/数字,如05/06、07/08等

我正在使用ASP.NET MVC2,并通过从DB读取的这些字符串生成链接,这就是问题所在

显然,链接到:

www.mysite.com/yearperiod/05/06/detail

将不会与指向的链接相同

www.mysite.com/yearperiod/2005/detail

解决这个问题的好办法是什么?我的第一个想法是将每个
/
转换为
-
,但随后我遇到了一个问题/开销,即必须跟踪哪些代码被转换,以便在写回数据库时,我不会无意中将有效的
-
转换为
//code>(如果有意义的话)

编辑:想想看,我不知道如何跟踪每个转换的
/
。。。嗯

edit1:给定以下字符串:“2001/2-水果”

但是,如果我从视图中调用linkhelper,则渲染的链接显示为: 查看来源:
  • 渲染链接:
    http://localhost:XXXX/Period/2001/2+-+水果

    而我需要它作为:

    http://localhost:XXXX/Period/2001%2f2+-+水果

    edit2:浏览器(在chrome中测试)正在自动将
    %2f
    转换为
    /
    。现在怎么办

    edit3:哦。。。看起来IE行为正常(按要求)。。。嗯

    • IE正确显示链接(已编码),单击后链接仍保持编码状态
    • Firefox显示解码的链接,单击后进行编码
    • Chrome显示已解码的链接以及单击后的解码

      • 为什么不使用
        Server.UrlEncode
        。您可以对所有字符串进行URL编码

        string strDatePeriod = Server.UrlEncode("05/06");
        
        要将其转换回原始字符串,只需使用
        Server.UrlDecode

        string origStr = Server.UrlDecode(strDatePeriod);
        

        如果数据库中的实体正在输出字符串“05/06”,则该实体还必须具有某种唯一标识符,例如主键整数。您不能将其作为URL的一部分,使上面的示例成为:

        www.mysite.com/yearperiod/123/05-06/detail
        
        然后,您就可以将斜杠转换为破折号,再将其转换为心形内容,而无需担心将其转换回心形内容,因为实际的数据库查找是在ID号(“123”部分)中执行的,而不是在日期字符串中执行的

        如果查看StackOverflow的URL,它们会执行类似的操作:

        stackoverflow.com/questions/3648634/dealing-with-es-in-links
        
        3648634是用于执行查找的此问题的数据库ID,“处理链接中的es”部分仅用于用户友好的描述性URL和搜索引擎优化

        下面是一个ToFriendlyUrl()方法,它可以生成这些外观美观、风格独特的URL,而不必使用URL编码,这会使URL看起来很难看:

        public static class UrlEncoder 
        { 
            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(); 
            } 
        }
        
        公共静态类URLCoder
        { 
        公共静态字符串ToFriendlyUrl(此UrlHelper,
        字符串(urlToEncode)
        { 
        urlToEncode=(urlToEncode??).Trim().ToLower();
        StringBuilder url=新的StringBuilder();
        foreach(urlToEncode中的字符)
        { 
        开关(ch)
        { 
        案例“”:
        url.Append('-');
        打破
        案例“&”:
        url.Append(“和”);
        打破
        案例'\'':
        打破
        违约:
        
        如果((ch>='0'&&ch='a'&&ch有趣地提示了处理它的方法,只需从链接中完全删除斜杠
        http://stackoverflow.com/questions/3648634/dealing-with-es-in-links
        这应该不是问题。如果您使用的是firefox,那么您将在源代码中看到转换后的源代码,以及在状态栏中看到的源代码当你用斜杠悬停它时,但当你点击它时,它会给你编码的字符串。如果有机会,你能在这里发布你的扩展方法吗?如果你愿意,它能做的只是
        服务器.UrlEncode()
        ,不幸的是,当我点击链接时(它将
        %2f
        转换回
        //code>)它没有给我编码的字符串…我只能在视图中使用该代码吗?我正在尝试在我的Pagelink助手类中使用它。应该为
        服务器导入哪个命名空间。
        我以为它是
        System.Web
        你可以直接通过
        HttpContext.Current.Server.UrlEncode
        HttpContext.Current.Serve调用它r、 UrlDecode
        来自命名空间
        系统。Web
        请查看我的编辑,问题出在
        /
        服务器上。UrlDecode
        似乎在工作,但当它被渲染时,斜杠被转换回来了?哇,这是一个更好的解决方案…真不敢相信我没有想到使用它,现在看起来很明显rting back是我所担心的,但是依赖id会更好,这样我就可以对url做任何我想做的事情,而不必担心“唯一性”。谢谢你的回答!
        public static class UrlEncoder 
        { 
            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(item.Title) %>