0

好的,所以我正在构建一个最终将基于请求主机进行品牌标记的页面。例如,如果用户浏览 www.firsthost.com,我的过滤器会检测到这一点并将其设置为品牌 1。如果用户浏览至 www.secondhost.com,我的过滤器会检测到它并将其设置为品牌 2。这些品牌 id用于动态选择页面上的资产和选项。

目前,我正在做的是在 ActionFilter 内部进行此确定并将品牌 ID 填充到会话中,然后在控制器中引用它,我使用它来构建具有正确引用和资产的视图模型。我不喜欢的是我必须创建一个方法来从会话中挖掘出这个品牌 ID,并在控制器中的每个操作中调用它,我真的不喜欢将它塞进会话中的想法任何一个。显然我想对用户隐藏它,所以我真的不想把它放入 cookie 中。

有没有人接触过这个?你是怎么解决这个问题的?我只是在寻找一种更清洁(如果不是更安全)的方法来实现此功能,如果框架已经有一些帮助,我更愿意使用它。

4

1 回答 1

1

您可以在过滤器中执行此操作并将品牌信息传递给 ViewBag 中的视图。像这样的东西在概念上会起作用:

public class SetBrandFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewBag.Brand = GetBrandInformationForHost(filterContext.HttpContext.Request.Url.Host)
    }
}

您可以将此过滤器设置为属性并将其应用于您的控制器(或基本控制器),或将其注册为全局过滤器。您将在此过滤器中处理所有品牌数据,因此您完全不必在操作中担心它。

这与您现在正在执行的操作类似,但不是使用会话(对于您传递的数据类型而言,这并不是真正必需的,因为它仅与单个请求相关)您使用 ViewBag。

于 2013-04-02T00:48:34.990 回答