【问题标题】:Null reference exception for existing but encrypted query string现有但加密的查询字符串的空引用异常
【发布时间】:2012-10-14 06:58:52
【问题描述】:

我面临以下问题:

我加密我的查询字符串然后编码结果所以我得到url 像这样:


PageDetail.aspx?enc=LFgzoz6LxQ54RaOMuZCJlluim9oH%2fRW2bpGJEo3rZ7E1Y8ixg9vbHRRc2koFdqbK%2f5PS%2fIv1v%2b3N%2beLwXJMtpdTOEwqwZLoTkh%2bIPW1S4f4764i3MY%2f9AECdSNmIgeaSovpJouXp3bQi4ntOyJOzW4eXawpAvS3gGvPWQLsr0My9NcAd5PT5Qwr2vVOfzjAYc%2f%2f1AdseguQUyWX7sIPK%2fPGYxLmjU204I2bGS%2f8%2fSPCXp4fZfbfJIaafBmSFbRhXAb%2fneWQFb83PzcP7Ljk9o90qMAeVuRvwhAcy6IsPmW76OpwT8JRK8Vw%2fTrmoSDmNCMYN1VuCm%2fT6fvg1mbiruqmPnDoKXr8zR2ChY1zev8leWHWPDmn572Hi02w6nu4vamOSlgIvH2LNEHUYYtIITX1DH%2bSagIl%2fuiNtWsQsdrqd%2b31ksO8GVYuJcAnn7%2fcST4w5Fzs3JPO2cPwiMeXDQw%3d%3d

然后我尝试解密结果: 但是当我尝试通过以下方式获取查询字符串时:

Request.QueryString["enc"] 

我得到空引用异常,我不知道为什么?

【问题讨论】:

  • 您可能正试图在页面生命周期中的某个时间点访问 Request 对象,而该对象尚不存在或已被销毁。
  • 我在名为items.aspx 的页面中加密,然后当点击加密链接时,我尝试在PageDetail.aspx 的页面加载中解密
  • 你能发布堆栈跟踪吗?或尝试 Request["enc"]。
  • 我得到了同样的异常:at UI.PageDetail.Page_Load(Object sender, EventArgs e) in F:\...\UI\PageDetail.aspx.cs:line 29 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

标签: c# asp.net encryption query-string nullreferenceexception


【解决方案1】:

您在查询字符串中的参数有 514 个字符,认为这可能是问题的原因。
查询字符串有长度限制。

【讨论】:

  • hmmm,那么如何最小化长度,我只是先加密然后编码,我想解密查询字符串!
  • 我不确定它是否可行,但您可以尝试使用任何无损压缩算法来压缩您的查询字符串。
  • @Jacek:一般来说,高度加密的东西看起来是随机的,这意味着压缩(依赖于模式)实际上并不能做很多事情。
  • @just_name:您可能需要退回问题并检查加密查询字符串是否实际上是正确的解决方案。如果您正在加密查询字符串服务器端的内容,那么您可以将数据存储在其中并将某种短 ID 放入查询字符串中。如果它在客户端上被加密,那么它可能不安全。
【解决方案2】:

那行代码不会抛出空引用异常,因为它找不到查询字符串部分,而是因为它找不到请求对象。如果您要查找的部分不存在,QueryString 部分将只返回 null。

这可能是因为此代码是在未设置请求对象的地方编写的(例如应用程序启动事件)。您很可能需要将代码移动到更合适的位置。如果您认为您应该能够从您所在的位置访问 Request 对象,那么您需要向我们提供有关该代码行上下文的更多详细信息。

【讨论】:

  • Request.QueryString["enc"]PageDetail.aspx的页面加载中
  • 在我进行加密之前,我可以访问查询字符串!
  • 您的问题中只有一行代码。我的意思是那个。
  • 嗯...反对票的人还在用我的答案解释问题吗?
  • @just_name:谢谢。我不认为会是你,但我想知道是否有人反对他们为什么这样做的答案,以便我可以适当地改进(或者如果适当的话,我可以教育他们为什么他们是错误的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2011-01-25
  • 1970-01-01
  • 2013-08-11
  • 2016-07-28
  • 1970-01-01
相关资源
最近更新 更多