如何将包含冒号的GET请求发送到ASP.NET MVC2控制器?

时间:2010-04-07 14:15:39

标签: asp.net-mvc urlencode

这很好用:

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参数。


相关


Sending URLs/paths to ASP.NET MVC controller actions

3 个答案:

答案 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

我同意将内容编码到网址中会很好,但可能有充分的理由不这样做。