这很好用:
GET /mvc/Movies/TitleIncludes/Lara%20Croft
当我提交包含冒号的请求时,如下所示:
GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb
...它会产生400错误。该错误表示 ASP.NET在URL中检测到无效字符。
如果我尝试url-escaping,请求看起来像这样:
GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb
...这也给了我一个400错误。
如果我用|替换冒号:
GET /mvc/Movies/TitleIncludes/Lara%20Croft|%20Tomb
..这也被认为是非法的,这次有500错误。消息:路径中的非法字符。
URL转义|导致相同的错误。
我真的,真的不想使用querystring参数。
答案 0 :(得分:3)
我发现URL编码不起作用,但自定义编码确实如此 我想ASPNET MVC使用文件系统来进行解析和路由,因为URL中的一个字符在文件系统中是不合法的,会导致500或400错误。
所以我所做的就是用unicode替换冒号 ¡javascript方面的字符,然后在操作中进行相反的操作。像这样:
浏览器:
function myEscape(s){
return s.replace(':', '%C2%A1').trim();
}
在操作中,在使用参数之前调用此转换:
private string MyCustomUnescape(string arg)
{
return arg.Replace("¡", ":");
}
同样的方法适用于斜杠 - 只需选择一个不同的unicode字符。当然,如果您的字符串参数本身是unicode,那么您将不得不为“编码”表单使用不可打印的字符。
答案 1 :(得分:1)
如果搜索引擎优化不是问题,您可以使用base64,然后使用urlencode。在第一步之后,您将拥有的每个角色都将被轻松编码。 .NET中的解码就像使用System.Web.HttpUtility和System.Convert中的帮助一样简单。
答案 2 :(得分:0)
类似的回答: https://stackoverflow.com/a/12037000/134761
对参数使用问号和&符号,并对参数进行URL编码。
示例:GET / mvc / Movies / TitleIncludes?title = Lara%20Croft%3A%20Tomb
我同意将内容编码到网址中会很好,但可能有充分的理由不这样做。