缓冲区不能为空。参数名称:buffer

时间:2011-11-17 06:46:43

标签: asp.net c#-4.0

我编写的代码用于发送包含指向网址链接的电子邮件,用户必须点击该链接进行确认。

示例链接: http://localhost:3531/VerificationModule/VerifyEmail.aspx?TemplateID=519457608&F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLeMU5i6KWEZculKhM0IOhYFaMc-DsB

但是当用户点击该链接时,它会在浏览器中打开,但会显示以下错误。

  

“缓冲区不能为空。参数名称:缓冲区”

     

请在下面找到堆栈跟踪:

[ArgumentNullException: Buffer cannot be null.
 Parameter name: buffer]
 System.IO.MemoryStream..ctor(Byte[] buffer, Boolean writable) +9629927
 System.IO.MemoryStream..ctor(Byte[] buffer) +6
 Auth.IdentityTokenXChangeData.Deserialize(String base64Package) +187
 Auth.IdentityTokenXChange.TrySniffIdentityToken(HttpRequest req, String& sessionId, String& sessionTag, String& returnUrl) +244
 Auth.IdentityModule.OnBeginRequest(Object sender, EventArgs e) +365
 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()  +220
 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&   completedSynchronously) +120`

这正在吃掉我的一天。任何建议都会有很大的帮助。

找出错误的线索.. 我认为问题在于QueryString中的编码值

("F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLe‌​MU5i6KWEZculKhM0IOhYFaMc-DsB") - 

由于某些原因,Base64 Decode返回'null'。

Method -
'System.Web.HttpServerUtility.UrlTokenDecode
("F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLe‌​MU5i6KWEZculKhM0IOhYFaMc-DsB")'

有关为什么返回null的任何想法?它不是有效的Base64编码吗?

1 个答案:

答案 0 :(得分:2)

这意味着Auth.IdentityTokenXChangeData.Deserialize方法创建一个带有MemoryStream参数的新buffer实例。

此方法似乎特定于您的代码/环境(您网站中有Auth.IdentityModule),因此您需要查看它。