我正在为Intranet应用程序开始Web API Web服务。我们将要求IIS级别的Windows身份验证,我可以成功从HttpContext.Current.User.Identity.Name
获取用户名。我们在应用程序数据库中存储有关用户的其他信息,我需要抓取这些信息并将其添加到某个地方的请求中(如果不是实际的请求对象,那么控制器可以访问的其他地方)。
我的想法是在请求通过身份验证后立即运行数据库查询来捕获此信息,并使用我需要的其他信息创建AppUser
对象。
问题是这个行动应该在哪里执行?我在搜索时看到了几件事,但我不确定合适的地方 - 这是我第一次涉足Web API。
我相信可能有超过1种“正确”的方式,但正在寻找有关该主题的一些最佳做法/指导。
修改
我还希望能够使用来自数据库的信息(存储在AppUser
对象中)来处理[Authorize]
属性中的逻辑(通常是授权,管理员角色等) )。
答案 0 :(得分:1)
一般情况下,您应该在实际需要时获取此信息,我个人更喜欢在基本控制器(主控制器)上使用方法或属性AppUser,此方法/属性将抽象检索所有详细信息来自数据库的用户数据,确保在缓存服务中甚至在正在运行的控制器实例的内存中缓存从数据库返回的数据,如下所示
public class BaseApiController : ApiController
{
private AppUser appUser = null;
protected AppUser CurrentUser
{
get
{
if(appUser==null)
appUser=LoadUserInfo();
return appUser;
}
}
}