我想在生产和发展环境上发送不同的电子邮件,例如在测试时仅向我发送电子邮件。我知道我可以在webconfig文件中设置应用程序值,或者在发送电子邮件之前检查URL。我想知道这样做的最佳做法是什么,或者如果还有其他一些我不了解的选项可能会更好?任何有关该主题的信息都将不胜感激。
答案 0 :(得分:3)
我使用的是Preprocessor Directives (in C#)。在VB中,它仅被称为Directives。
我有一个这样的辅助方法:
public static bool IsDebug()
{
#if DEBUG
return true;
#else
return false;
#endif
}
然后在代码中的任何地方都可以调用此方法并在运行时期间它将告诉代码是在Debug
(开发)中运行还是在Release
版本(生产)。
答案 1 :(得分:2)
如果您只想将电子邮件发送给自己而不是正式版,则可以通过在“收件人”字段中更改电子邮件地址来完成。
因此,无论您将该值放在何处,都可以在数据库或配置文件中对其进行更改。
应用程序通过“ ASPNETCORE_ENVIRONMENT”确定您是否在开发服务器中。
答案 2 :(得分:1)
为什么不将开发邮件服务器设置为仅向您发送邮件而不是更改您的代码?
似乎比编写代码要好。
答案 3 :(得分:1)
嗯,只有你可以确定什么是产品和什么是开发,所以web.config中的标志是可以的,但更优雅的解决方案将涉及像Dependency Injection(DI)ala Spring.Net这样的模式, StructureMap和Castle Windsor仅举几例。
DI背后的关键概念是通过动态提供有关在运行时实例化的类的信息来解耦/隔离实现中的变体。例如,在这种情况下,您的所有代码都将被编写为处理“邮件”界面(无论是prod还是dev环境),并且您将配置DI框架以实例化生产或开发版本的邮件实现类。它有点干净,因为你没有暴露和扩散配置参数值。
虽然肯定有一个学习曲线,所以在项目的这个阶段它可能不可行,但绝对要记住。
答案 4 :(得分:1)
您可以使用web config inheritance的IIS来允许您的应用从其部署的相应环境中“继承”全局上下文设置。
在安装.NET应用程序的父目录中(例如/inetpub/wwwroot.web.config
,甚至是根web.config(\Windows\Microsoft.NET\Framework\ver\web.config
),添加您的环境特定设置,例如
在PROD中
<appSettings>
<add key="sendMailTo" value="" />
<add key="environmentName" value="PROD" />
</appSettings>
在DEV
中 <appSettings>
<add key="sendMailTo" value="me@mydomain.com" />
<add key="environmentName" value="DEV" />
</appSettings>
每次重新部署应用时,都不会部署这些环境上下文设置。此外,您部署到服务器的所有其他应用程序也可以继承这些设置。