我正在开发一个提供帐户管理功能的应用程序。实施方面,它有一个用于UI的MVC应用程序和用于业务逻辑的 单独的 几个Web API服务。
我需要在以下几种情况下管理向用户发送邮件
用户创建一个帐户& Web API发送确认/激活邮件
用户忘记了密码& Web API发送重置链接
现在的问题是,如何在不暴露Web API主机IP(或URL)的情况下向用户发送邮件?也许,我可以做到以下几点:
在MVC中创建一个动作,当被调用时,将信息发送给 适当的Web API控制器方法
使用适当的参数,将上述操作包含为Web API发送的邮件中的href
另一种方法可能是,只需将代码发送给没有链接的用户,并要求用户在UI上输入该令牌(用户知道MVC UI链接)。
我更喜欢第二种方法。这是正确的方法吗?还有其他更好的方法吗?
注意事项:
Web API将使用SendGrid发送邮件
系统(MVC和Web API)将托管在Azure中(我提到这个 当Azure扩展出来时,知道上面第一种方法中的任何陷阱 系统)。
由于
答案 0 :(得分:0)
我不明白这种困惑。无论如何,您永远不会将用户直接链接到Web Api。从本质上讲,MVC项目在这种情况下只是围绕Web Api的UI,例如:
正如您所看到的,上面没有任何一点是用户甚至意识到Web Api组件存在。他们唯一的互动是MVC网站。
现在,我会更进一步,并说MVC网站不应该知道它正在使用Web Api, 。从本质上讲,它只是使用Web Api,就像使用数据库一样。它只是知道它需要执行一些恰好由Web Api完成的功能。因此,您应该将Web Api调用包装到服务类中,从而实现接口。例如:
public interface IService
public class WebApiService : IService
在IService
上,您将定义服务客户端可以采取的所有操作。 RegisterUser
,SendConfirmationEmail
,ConfirmUser
等等。然后,在WebApiService
上,您将实施这些方法,当然还可以利用您的Web Api。但是,您的MVC站点应该只与IService
进行交互,然后您可以使用依赖注入框架为WebApiService
注入IService
。然后,如果由于某种原因,您稍后需要直接切换到使用Entity Framework,您可以创建类似的内容:
public class EntityFrameworkService : IService
然后,然后注入。由于MVC应用程序只知道IService
,因此您根本不需要更改任何内容。