MVC2 ASP.Net URL是否自动解码?

时间:2010-07-29 21:47:34

标签: c# asp.net-mvc asp.net-mvc-2

所以我在MVC2中调用Controller就像这样,我访问了经典的查询字符串就好了。请注意第二个参数thing2已经URLEncoded,并且再次检索URLEncoded查询字符串和URLDecoding是没有问题的。我的例子看起来像这样......

http://mydomain.com/controller?thing1=1544&thing2=somethingURLEncoded

现在我尝试转向处理参数的MVC2 ASP.Net方式,并使自己成为一个很好的自定义MapRoute。我测试它,看它是否适用于简单的测试......

http://mydomain.com/controller/Index/1544/999

我使用VS2010在我的控制器内部的Index方法中调试成功!

然后我决定采取下一步并将URL上的最后一个参数更改为URLEncoded值......

http://mydomain.com/controller/Index/1544/somethingURLEncoded

我在浏览器中执行此操作后看到的问题是,在我进入控制器内部的Index方法之前,它几乎看起来像MVC2 ASP.Net是自动URL解码的。

是什么给出的?我以为我可以先进入控制器内部,然后再进行自己的URLDecode。因为原始数据是AES加密的并且在其中有正斜杠..,过早地使用我的参数URLDecoding不是我可以计划的副作用。

请帮忙。

3 个答案:

答案 0 :(得分:6)

是的,MVC自动url解码动作参数。但您仍然可以通过查询字符串访问url编码版本。

答案 1 :(得分:1)

所以我做的是在我的Action参数中使用Base64编码而不是URLEncode我的AES加密数据。

答案 2 :(得分:0)

由于ASP.NET MVC基于ASP.NET引擎(并不奇怪),正确编码的URL会被引擎自动正确地进行URL解码,因此您无需提问。简单地:

public ActionResult Index(string q)
{
    // TODO : Use the q parameter here as is without ever caring of URL decoding it.
    // It's the caller of this action responsibility to properly URL encode his data
    return View();
}