【问题标题】:Asp.Net MVC encrypted querystringAsp.Net MVC 加密查询字符串
【发布时间】:2015-12-08 17:27:00
【问题描述】:

我正在尝试在 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但字符串参数始终为空。

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 获取整个网址,但我真的不明白为什么加密的字符串参数为空(或为空)。

我是否在某处漏掉了重点,或者对 null 参数值有什么解释?

【问题讨论】:

    标签: c# asp.net-mvc encryption


    【解决方案1】:

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

    ?queryString=xxxxxxxx
    

    我了解您的方法,但您要么必须单独加密所有参数,使用我上面展示的方法,要么编写您自己的模型绑定器,该方法可以解释您的代码的 URL 中的内容消费。

    模型绑定器:https://msdn.microsoft.com/en-us/library/dd410405(v=vs.100).aspx

    【讨论】:

    • 感谢您的回复。是的,我忘记在编码的 queryString 之前包含“queryString”,
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2010-09-19
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      相关资源
      最近更新 更多