2011-11-17 201 views
2

我已经编写了代码发送带有指向URL的链接的电子邮件,用户必须点击该链接进行确认。缓冲区不能为空。参数名称:缓冲区

示例链接: 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` 

这是吃了我的一天。任何建议都会有很大的帮助。

上了错误的线索.. 我相信问题是与编码值的查询字符串

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

的Base64编码解码正在返回“空”因为某些原因。

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

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

+0

有没有想过你的问题? –

回答

2

这意味着Auth.IdentityTokenXChangeData.Deserialize方法会创建一个新的MemoryStream实例,其中null参数为空。

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

+0

感谢您的回复。我认为这个问题是在查询字符串(“F960866879F669E = Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLeMU5i6KWEZculKhM0IOhYFaMc-DSB”)编码的价值 - Base64编码解码正在恢复由于某些原因“空”。 (方法System.Web.HttpServerUtility.UrlTokenDecode(base64Package)) – Dinny