【发布时间】:2014-10-09 08:21:55
【问题描述】:
在我尝试升级到 ASP.NET Identity 之前,我有一段非常简单的代码使用。这是一个真正令人头疼的问题。 将 ASP.NET MVC 5 与 ASP.NET Identity 2.1 结合使用(在撰写本文时是最新最好的) 我有一个“用户忘记了他们的电子邮件”控制器操作:
await this.UserManager.SendEmailAsync(
user.Id,
AccountStrings.ForgotPasswordEmailTitle,
string.Format(AccountStrings.ForgotPasswordEmailMessage, callbackUrl));
我的用户管理器使用IIdentityMessageService 的实现来发送电子邮件,我的代码在Task SendAsync(IdentityMessage message) 中。在该方法中,我需要一个活动的 Http 上下文,因为我使用 Razor 视图引擎来构建电子邮件。同样,这曾经有效,直到今天。
截至今天,在我的方法中抛出了一个异常,因为正在呈现电子邮件,告诉我我没有活动的 Http 上下文。当然,HttpContext.Current 为空。在控制器操作中调用SendEmailAsync 时它不为null,在任务继续中的await 之后它不为null,但在SendEmailAsync 中它为null。
我使用的是正确的<system.web><httpRuntime targetFramework="4.5.1" /></system.web>
web.config 中的标志,一切都在书本上。现在,在更新 some 组件之后——无论是次要的 ASP.NET MVC 版本还是 ASP.NET Identity 版本——我不知道——HttpContext.Current 为空。
我有一个丑陋的“修复”,我在创建 IdentityMessageService 时将 HttpContext.Current 保存到本地 var,并在 SendAsync 执行时将当前 HttpContext 设置为该值,这可行,但这肯定闻起来很严重ASP.NET 堆栈内的回归,某处。
有没有人遇到过类似的情况?
【问题讨论】:
-
“web.config 中的正确标志”到底是什么意思?
-
哎呀 - 所以吃了我的格式。正在谈论启用“友好”任务调度程序的
标志。
标签: asp.net asp.net-mvc asp.net-identity