Asp.net mvc 如何将包含冒号的GET请求发送到ASP.NET MVC2控制器?
这很好:Asp.net mvc 如何将包含冒号的GET请求发送到ASP.NET MVC2控制器?,asp.net-mvc,urlencode,Asp.net Mvc,Urlencode,这很好: GET /mvc/Movies/TitleIncludes/Lara%20Croft 当我提交包含冒号的请求时,如下所示: GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb …它会生成一个400错误。错误表示ASP.NET在URL中检测到无效字符 如果尝试url转义,请求如下所示: GET /mvc/Movies/Title
GET /mvc/Movies/TitleIncludes/Lara%20Croft
当我提交包含冒号的请求时,如下所示:
GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb
GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb
…它会生成一个400错误。错误表示ASP.NET在URL中检测到无效字符
如果尝试url转义,请求如下所示:
GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb
GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb
…这也给了我400个错误
如果我用|替换冒号:
GET /mvc/Movies/TitleIncludes/Lara%20Croft|%20Tomb
…这也被认为是非法的,这次有500个错误。消息:路径中存在非法字符
URL转义会导致相同的错误
我真的,真的不想使用querystring参数
相关:
我发现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,则必须为“编码”表单使用不可打印的字符 如果SEO不是问题,您可以使用base64,然后对其进行URL编码。在第一步之后,您将拥有的每个字符都将很容易编码。在.NET中解码与使用System.Web.HttpUtility和System.Convert中的帮助程序一样简单。这里回答了类似的问题: 对参数使用问号和符号,并对参数进行URL编码 示例:GET/mvc/Movies/TitleIncludes?title=Lara%20Croft%3A%20G 我同意将内容编码到url中也很好,但可能有一个很好的理由不这么做