首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >URL中的URL编码斜杠

URL中的URL编码斜杠
EN

Stack Overflow用户
提问于 2009-02-26 17:58:57
回答 7查看 71.3K关注 0票数 58

我的地图是:

代码语言:javascript
复制
routes.MapRoute(
   "Default",                                             // Route name
   "{controller}/{action}/{id}",                          // URL with params
   new { controller = "Home", action = "Index", id = "" } // Param defaults
);

如果我使用URL http://localhost:5000/Home/About/100%2f200,就没有匹配的路由。我将URL更改为http://localhost:5000/Home/About/100,然后再次匹配路由。

有没有什么简单的方法来处理包含斜杠的参数?其他转义值(空格%20)似乎也有效。

编辑:

对Base64进行编码对我来说很有效。这让URL看起来很难看,但现在还可以。

代码语言:javascript
复制
public class UrlEncoder
{ 
    public string URLDecode(string  decode)
    {
        if (decode == null) return null;
        if (decode.StartsWith("="))
        {
            return FromBase64(decode.TrimStart('='));
        }
        else
        {
            return HttpUtility.UrlDecode( decode) ;
        }
    }

    public string UrlEncode(string encode)
    {
        if (encode == null) return null;
        string encoded = HttpUtility.PathEncode(encode);
        if (encoded.Replace("%20", "") == encode.Replace(" ", ""))
        {
            return encoded;
        }
        else
        {
            return "=" + ToBase64(encode);
        }
    }

    public string ToBase64(string encode)
    {
        Byte[] btByteArray = null;
        UTF8Encoding encoding = new UTF8Encoding();
        btByteArray = encoding.GetBytes(encode);
        string sResult = System.Convert.ToBase64String(btByteArray, 0, btByteArray.Length);
        sResult = sResult.Replace("+", "-").Replace("/", "_");
        return sResult;
    }

    public string FromBase64(string decode)
    {
        decode = decode.Replace("-", "+").Replace("_", "/");
        UTF8Encoding encoding = new UTF8Encoding();
        return encoding.GetString(Convert.FromBase64String(decode));
    }
}

EDIT1:

最后,最好的方法是为我需要选择的每个项目保存一个格式良好的字符串。这好多了,因为现在我只对值进行编码,而不对其进行解码。所有特殊字符都变成"-“。我的很多db表现在都有这个额外的列"URL“。数据非常稳定,这就是为什么我可以走这条路。我甚至可以检查"URL“中的数据是否是唯一的。

EDIT2:

还要注意空格字符。它在VS集成but服务器上看起来还可以,但在iis7 Properly url encode space character上就不一样了

EN

回答 7

Stack Overflow用户

发布于 2009-02-26 18:01:55

如果这只是最后一个参数,你可以这样做:

代码语言:javascript
复制
routes.MapRoute(
    "Default",                                                // Route name
    "{controller}/{action}/{*id}",                            // URL with parameters
    new { controller = "Home", action = "Index", id = "" });  // Parameter defaults
票数 48
EN

Stack Overflow用户

发布于 2009-11-17 07:00:58

在.NET 4.0测试版2中,CLR团队提供了一个变通方法。

将以下内容添加到您的web.config文件:

代码语言:javascript
复制
<uri> 
    <schemeSettings>
        <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
    </schemeSettings>
</uri>

这会导致Uri类根据描述Uri的RFC进行行为,从而允许在路径中转义斜杠,而无需取消转义。CLR团队报告说,由于安全原因,它们偏离了规范,并且在您的.config文件中设置它基本上会使您获得涉及到的其他安全注意事项的所有权,而不是不转义斜杠。

票数 24
EN

Stack Overflow用户

发布于 2009-11-15 02:15:46

另一种选择是使用querystring值。非常差劲,但比自定义编码简单。

代码语言:javascript
复制
http://localhost:5000/Home/About?100%2f200
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/591694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档