我正在尝试在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
获取整个网址,但我真的无法理解为什么加密的字符串参数为空(或为空)。
我是否错过了某处或有空参数值的解释?
答案 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] 使用与您的操作的参数名称匹配的查询字符串参数。