假设您使用的是Phil Haacked's 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);
}
希望对你有帮助!