这工作正常:
GET /mvc/Movies/TitleIncludes/Lara%20Croft
当我提交包含冒号的请求时,如下所示:
GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb
...它会生成 400 错误。错误说ASP.NET 检测到 URL 中存在无效字符。
如果我尝试 url 转义,请求将如下所示:
GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb
...这也给了我一个 400 错误。
如果我用 | 替换冒号:
GET /mvc/Movies/TitleIncludes/Lara%20Croft|%20Tomb
..这也被视为非法而被拒绝,这次是 500 错误。消息:路径中存在非法字符。
URL 转义 |导致同样的错误。
我真的真的不想使用查询字符串参数。
related:
将 URL/路径发送到 ASP.NET MVC 控制器操作 https://stackoverflow.com/questions/1714980
我发现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,那么您必须使用不可打印的字符作为“编码”形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)