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中也很好,但可能有一个很好的理由不这么做