我有一個場景,在我的項目中,我必須處理Internet和Intranet兩種模式。現在我必須根據模式應用濾波器,根據模式(有條件)應用濾波器的最佳方式是什麼。MVC有條件篩選器提供商
這樣做的一種方法是創建自定義過濾器提供程序並註冊它。但是如何以及何時可以檢查應用程序模式。
感謝, -Babu
我有一個場景,在我的項目中,我必須處理Internet和Intranet兩種模式。現在我必須根據模式應用濾波器,根據模式(有條件)應用濾波器的最佳方式是什麼。MVC有條件篩選器提供商
這樣做的一種方法是創建自定義過濾器提供程序並註冊它。但是如何以及何時可以檢查應用程序模式。
感謝, -Babu
讓我們假設你正在使用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);
}
希望它會幫助你的!
通過ip可以很容易地告訴用戶來自內部網或互聯網的什麼網絡,即內部網ip是以10,172還是192開頭的? – Mark
你是正確的,但問題與應用條件過濾器有關。 – Babu