Asp.Net MVC加密查询字符串

时间:2015-12-08 17:27:01

标签: c# asp.net-mvc encryption

我正在尝试在ActionResult上获取加密的查询字符串,但参数始终为空。

我已经实现了一个电子邮件URL并加密了一些这样的信息:

string key = "r0b1nr0y";
var queryString = EncryptDecryptQueryString.Encrypt(String.Format("testId={0}&otherInfo={1}", Id, otherInfo), key);

导致此URL参数:

?fpZG2mFDOZbuuBFccKLeu9Rzbn/I05i577IaaMSt0uztuHmWdeVIOQ==

网址是这样的:

www.test.com/MyController/MyAction?fpZG2mFDOZbuuBFccKLeu9Rzbn/I05i577IaaMSt0uztuHmWdeVIOQ==

现在,在控制器端,ActionResult假设接收一个字符串。

运行程序,当我尝试测试生成的url时,代码到达MyAction但字符串参数始终为null。

public ActionResult MyAction(string queryString)
{
     ... Do Stuff here...        
}

我也试图为它创建一个特定的路线(like this example),但是没有用。

routes.MapRoute(
            "RouteTest",
            "MyController/MyAction/{queryString}",
            new { controller = "MyController", action = "MyAction", queryString = "" }
        );

我可以使用Request.RawUrl获取整个网址,但我真的无法理解为什么加密的字符串参数为空(或为空)。

我是否错过了某处或有空参数值的解释?

2 个答案:

答案 0 :(得分:3)

它为null,因为您的方法期望您的网址以:

结尾
?queryString=xxxxxxxx

我理解你的方法,但你要么必须分别加密所有参数,使用我上面显示的方法,或者为方法编写自己的模型绑定器,可以解释代码的URL中的内容消耗。

模型粘合剂:https://msdn.microsoft.com/en-us/library/dd410405(v=vs.100).aspx

答案 1 :(得分:1)

首先,您需要对Base64字符串进行UrlEncode,因为“/”和“=”在您的网址中具有特殊含义。

第二:如果没有路由,您的网址应为: www.test.com/MyController/MyAction?queryString=[UrlEncodedBase64] 使用与您的操作的参数名称匹配的查询字符串参数。