我想在生产环境和开发环境中以不同的方式发送电子邮件,例如在测试时仅向我发送电子邮件。我知道我可以在 webconfig 文件中设置应用程序值或在发送电子邮件之前检查 url。我想知道这样做的最佳做法是什么,或者是否有其他我不知道的选项可能会更好?任何有关此主题的信息将不胜感激。
5 回答
我使用所谓的预处理器指令(在 C# 中)。在 VB 中,它仅称为指令。
我有一个这样的辅助方法:
public static bool IsDebug()
{
#if DEBUG
return true;
#else
return false;
#endif
}
然后在代码中的任何地方都可以在运行时调用此方法,它会判断代码是正在运行Debug
(开发)还是Release
版本(生产)。
如果您只想将电子邮件发送给自己(如果不是生产),请通过更改“收件人”字段中的电子邮件地址来完成。
所以要么在数据库或配置文件中改变它,无论你把那个值放在哪里。
应用程序确定您是否在开发服务器中的方式是使用“ASPNETCORE_ENVIRONMENT”。
您可以查看此链接,在 ASP.NET Core 中使用多个环境
好吧,只有你可以确定什么是生产和开发,所以 web.config 中的标志是可以的,但更优雅的解决方案将涉及像依赖注入(DI) ala Spring.Net、StructureMap和Castle Windsor这样的模式来命名很少。
DI 背后的关键概念是通过动态提供有关在运行时实例化哪个类的信息来解耦/隔离实现中的变体。例如,在这种情况下,您的所有代码都将被编写为处理“邮件”接口(忽略它是 prod 还是 dev 环境),并且您将配置您的 DI 框架来实例化一个生产或开发版本邮件实现类。它更简洁一点,因为您没有公开和增殖配置参数值。
虽然那里肯定有一个学习曲线,所以在你的项目的这个阶段它可能不可行,但绝对要记住一些事情。
与其更改您的代码,不如将您的开发邮件服务器设置为只向您发送邮件,而不考虑 TO 地址字段?
似乎比编写代码来做到这一点更好。
您可以使用IIS 的Web 配置继承来允许您的应用从其部署到的相应环境中“继承”全局上下文设置。
在安装 .NET 应用程序的父目录中(例如/inetpub/wwwroot.web.config
,甚至根 web.config ( \Windows\Microsoft.NET\Framework\ver\web.config
),添加您的环境特定设置,例如
在产品中
<appSettings>
<add key="sendMailTo" value="" />
<add key="environmentName" value="PROD" />
</appSettings>
在开发中
<appSettings>
<add key="sendMailTo" value="me@mydomain.com" />
<add key="environmentName" value="DEV" />
</appSettings>
这些环境上下文设置不会在您每次重新部署应用程序时部署。此外,您部署到服务器的所有其他应用程序也可以继承这些设置。