我需要通过在我的 Web API 服务中的所有数据库调用上请求主机名来应用过滤。
此过滤的工作方式如下:
- 根据请求的主机名查找要配置文件的站点
- 将 Site.Id 应用于请求中进行的所有后续数据访问调用
本质上是一个全局过滤器,以便 API 服务返回的数据始终包含在主机中。
一种解决方案是将主机名作为参数传递给我的所有服务方法,如下所示:
public IEnumerable<Profiles> GetProfiles ()
{
var host = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
return profilesService.Get(host);
}
但由于这是所有请求的一致规则,我想提出一种更优雅的方式来处理这个问题,所以我的服务调用只是 profileSerivce.Get();
我想我需要将一个 ISiteLocator 注入到我的服务层中,该层具有主机名,甚至更好的是已经从数据库中检索到的 Id,然后我可以应用。但是我正在努力解决如何以及在何处引用 HttpContext 以获取主机名,以及是否可以使用 StructureMap 生命周期对其进行优化。