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

Din*_*nny 7 asp.net c#-4.0

我编写了代码来发送一封带有 URL 链接的电子邮件,用户必须单击该链接才能确认。

\n\n

示例链接:\n http://localhost:3531/VerificationModule/VerifyEmail.aspx?TemplateID=519457608&F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynf qRmh74ie535ymkvATEK5Jii11toMIZDZ_GVB8QolLeMU5i6KWEZculKhM0IOhyFaMc-DSB

\n\n

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

\n\n
\n

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

\n\n

请在下面找到堆栈跟踪:

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

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

\n\n

找到了有关错误的线索..\n我相信问题出在查询字符串中的编码值

\n\n
("F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLe\xe2\x80\x8c\xe2\x80\x8bMU5i6KWEZculKhM0IOhYFaMc-DsB") - \n
Run Code Online (Sandbox Code Playgroud)\n\n

由于某些原因,Base64 解码返回“null”。

\n\n
Method -\n\'System.Web.HttpServerUtility.UrlTokenDecode\n("F960866879F669E=Tw5NpFeW9HsAqc_Ap5dmOwqkZ041pFQGYLxRV-puumtHsfhrTYtDe51uCbGV44Kc1X3n6cggsynfqRmh74ie535ymkvATeK5Jii11tOMIZDZ_GVB8QolLe\xe2\x80\x8c\xe2\x80\x8bMU5i6KWEZculKhM0IOhYFaMc-DsB")\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道为什么它返回 null 吗?它不是有效的 Base64 编码吗?

\n

Sim*_*ier 5

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

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