我的地图是:
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看起来很难看,但现在还可以。
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上就不一样了
发布于 2009-02-26 18:01:55
如果这只是最后一个参数,你可以这样做:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{*id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }); // Parameter defaults
发布于 2009-11-17 07:00:58
在.NET 4.0测试版2中,CLR团队提供了一个变通方法。
将以下内容添加到您的web.config文件:
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
</schemeSettings>
</uri>
这会导致Uri类根据描述Uri的RFC进行行为,从而允许在路径中转义斜杠,而无需取消转义。CLR团队报告说,由于安全原因,它们偏离了规范,并且在您的.config文件中设置它基本上会使您获得涉及到的其他安全注意事项的所有权,而不是不转义斜杠。
发布于 2009-11-15 02:15:46
另一种选择是使用querystring值。非常差劲,但比自定义编码简单。
http://localhost:5000/Home/About?100%2f200
https://stackoverflow.com/questions/591694
复制相似问题