C# Asp.NETMVC加密查询字符串

C# Asp.NETMVC加密查询字符串,c#,asp.net-mvc,encryption,C#,Asp.net Mvc,Encryption,我试图在ActionResult上获取加密查询字符串,但参数始终为null public ActionResult MyAction(string queryString) { ... Do Stuff here... } 我已经实现了一个电子邮件URL,并对一些信息进行了加密,如下所示: string key = "r0b1nr0y"; var queryString = EncryptDecryptQueryString.Encrypt(String.Format

我试图在
ActionResult
上获取加密查询字符串,但参数始终为null

public ActionResult MyAction(string queryString)
{
     ... Do Stuff here...        
}
我已经实现了一个电子邮件URL,并对一些信息进行了加密,如下所示:

string key = "r0b1nr0y";
var queryString = EncryptDecryptQueryString.Encrypt(String.Format("testId={0}&otherInfo={1}", Id, otherInfo), key);
www.test.com/MyController/MyAction?fpZG2mFDOZbuuBFccKLeu9Rzbn/I05i577IaaMSt0uztuHmWdeVIOQ==
它将产生以下URL参数:

?fpZG2mFDOZbuuBFccKLeu9Rzbn/I05i577IaaMSt0uztuHmWdeVIOQ==
url是这样的:

string key = "r0b1nr0y";
var queryString = EncryptDecryptQueryString.Encrypt(String.Format("testId={0}&otherInfo={1}", Id, otherInfo), key);
www.test.com/MyController/MyAction?fpZG2mFDOZbuuBFccKLeu9Rzbn/I05i577IaaMSt0uztuHmWdeVIOQ==
现在,在控制器端,假设
ActionResult
接收一个字符串

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

public ActionResult MyAction(string queryString)
{
     ... Do Stuff here...        
}
我也尝试为它创建特定的路由(),但没有成功

routes.MapRoute(
            "RouteTest",
            "MyController/MyAction/{queryString}",
            new { controller = "MyController", action = "MyAction", queryString = "" }
        );
我可以使用
Request.RawUrl
获取整个url,但我真的不明白为什么加密字符串参数为null(或空)


我是否在某个地方漏掉了这一点,或者对空参数值有何解释?

它是空的,因为您的方法希望您的url以以下内容结尾:

?queryString=xxxxxxxx
我理解您的方法,但是您必须单独加密所有参数,使用我上面展示的方法,或者为该方法编写您自己的模型绑定器,该方法可以解释URL中的内容,以便代码使用


模型绑定器:

它为空,因为您的方法希望您的url以以下内容结尾:

?queryString=xxxxxxxx
我理解您的方法,但是您必须单独加密所有参数,使用我上面展示的方法,或者为该方法编写您自己的模型绑定器,该方法可以解释URL中的内容,以便代码使用


模型绑定器:

首先,您需要对Base64字符串进行URL编码,因为“/”和“=”在您的URL中有特殊含义

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

首先,您需要对Base64字符串进行URL编码,因为“/”和“=”在URL中具有特殊含义

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

感谢您的回复。是的,我忘记在编码的查询字符串之前包含“查询字符串”,谢谢回复。是的,我忘了在编码的查询字符串之前加上“查询字符串”,