0

我有一个场景,在我的项目中,我必须处理 Internet 和 Intranet 两种模式。现在我必须基于模式应用过滤器,基于模式应用过滤器的最佳方法是什么(有条件地)。

一种方法是创建自定义过滤器提供程序并注册它。但是我如何以及何时可以检查应用程序模式。

谢谢,-巴布

4

1 回答 1

1

假设您正在使用Phil Haacked 的 Conditional Filter Provider

public class ConditionalFilterProvider : IFilterProvider {
  private readonly 
    IEnumerable<Func<ControllerContext, ActionDescriptor, object>> _conditions;

  public ConditionalFilterProvider(
    IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions)
  {
      _conditions = conditions;
  }

  public IEnumerable<Filter> GetFilters(
      ControllerContext controllerContext, 
      ActionDescriptor actionDescriptor) {
    return from condition in _conditions
           select condition(controllerContext, actionDescriptor) into filter
           where filter != null
           select new Filter(filter, FilterScope.Global, null);
  }
}

并且您有两个自定义的 ActionFilterAttribute,分别称为 IntranetAttribute 和 InternetAttribute。假设所有 Intranet 请求都来自 IP 地址:10.122.122.12 或 10.122.122.13。

您可以像这样在 Application_Start 中配置条件提供程序:

    private void ConfigureModeAttribute()
    {
        //Configure a conditional filter
        string[] intranetIPs = { "10.122.122.12", "10.122.122.13" };
        IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
            new Func<ControllerContext, ActionDescriptor, object>[] {
                    ( c, a ) => intranetIPs.Contains(c.HttpContext.Request.UserHostAddress) ?
                    new IntranetAttribute() : new InternetAttribute() 
            };

        var provider = new ConditionalFilterProvider(conditions);

        // This line adds the filter we created above
        FilterProviders.Providers.Add(provider);
    }

希望对您有所帮助!

于 2013-12-03T11:58:19.940 回答