Gui*_*tos 7 interface asp.net-identity asp.net-core
我在我的项目中使用 AspNetCore.Identity,因此我编写了一个实现此接口的 EmailSender 类。
一切正常。
但是这个描述引起IEmailSender了我的注意:
Microsoft.AspNetCore.Identity.UI.Services.IEmailSender
此 API 支持 ASP.NET Core Identity 默认 UI 基础结构,不应直接从您的代码中使用。此 API 可能会在未来版本中更改或删除
如果它不打算直接在我的代码中使用,我应该使用什么?我的应用程序还在其他部分发送电子邮件,不仅仅是身份。
我认为你不需要使用IEmailSender. 事实上,根据我的经验,在某种程度上我认为你不应该使用它:
在 .NET 5.0 中,IEmailSender位于 package 中ASP.NET Core Identity.UI,默认实现注入到 DI 中,但不执行任何操作。如果您想使用框架提供的默认 UI,那就完全没问题了。但是,如果您不喜欢使用这些默认页面,而只想使用 Identity 框架的核心,包括整个包只是为了获取IEmailSender界面,对我来说似乎有点过分了。更不用说此时使用 Identity UI 时还有一个恼人的错误。
它不会增加任何价值。如果该框架可以自动扫描我的具体实现并使用它来发送电子邮件,我会被说服。但事实并非如此。您必须services.AddSingleton<>()自己通过 DI 注入电子邮件发送器,并通过构造函数注入在您想要发送电子邮件的地方使用它。
IEmailSender.SendEmailAsync(string email, string subject, string htmlMessage)方法非常基本。大多数时候,您甚至必须创建自己的 razor 库来自己生成 HTML 消息。就我而言(使用 SendGrid v9.22 和动态模板),我不仅需要传递 HTML 消息,还需要传递模板数据(用于通过 设置 SendGrid 模板中的占位符msg.SetTemplateData())。基本的SendEmailAsync()只是没有额外的参数让我在发送电子邮件时发送额外的数据。
如果您发现自己不会为某个项目切换到电子邮件提供商,那么您不妨创建一个适合您的具体电子邮件发送器,并将其直接注入到 DI 中。
如果您发现您的项目可能有一天会切换电子邮件提供商,那么拥有一个基本且简单的界面(例如 )IEmailSender是有意义的。
您绝对应该这样做,因为这IEmailSender是框架提供的发送电子邮件消息的最佳可用选项,特别是如果您必须处理 ASP.NET Identity 内容(帐户确认、密码恢复等)。
但是,为了正确使用它,您应该使用众多第三方服务之一(及其相应的 .NET NuGet 包)来实现它,如这篇官方文章中所建议的。
如果您需要进一步的说明来设置这些电子邮件发送器提供商,您可以查看我在博客上编写的这些实施指南(免责声明:我不隶属于其中任何一个):
事实上,API 将来可能会被删除,这一事实根本不应该打扰您,因为所有这些第三方软件包都有自己的 API:即使没有IEmailSender接口,您也可以使用它们(作为一个问题)事实上,你已经可以了)。
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |