我编写的代码用于发送包含指向网址链接的电子邮件,用户必须点击该链接进行确认。
但是当用户点击该链接时,它会在浏览器中打开,但会显示以下错误。
“缓冲区不能为空。参数名称:缓冲区”
请在下面找到堆栈跟踪:
[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_GVB8QolLeMU5i6KWEZculKhM0IOhYFaMc-DsB") -
由于某些原因,Base64 Decode返回'null'。
Method -
'System.Web.HttpServerUtility.UrlTokenDecode
("F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLeMU5i6KWEZculKhM0IOhYFaMc-DsB")'
有关为什么返回null的任何想法?它不是有效的Base64编码吗?
答案 0 :(得分:2)
这意味着Auth.IdentityTokenXChangeData.Deserialize
方法创建一个带有MemoryStream
参数的新buffer
实例。
此方法似乎特定于您的代码/环境(您网站中有Auth.IdentityModule),因此您需要查看它。