私のプロジェクトでは、インターネットとイントラネットの 2 つのモードを処理する必要があります。ここで、モードに基づいてフィルターを適用する必要があります。モードに基づいてフィルターを適用する最良の方法は何ですか (条件付き)。
これを行う 1 つの方法は、カスタム フィルター プロバイダーを作成して登録することです。しかし、いつ、どのようにアプリケーション モードを確認できますか。
ありがとう -バブ
私のプロジェクトでは、インターネットとイントラネットの 2 つのモードを処理する必要があります。ここで、モードに基づいてフィルターを適用する必要があります。モードに基づいてフィルターを適用する最良の方法は何ですか (条件付き)。
これを行う 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);
}
}
そして、IntranetAttribute と InternetAttribute という 2 つのカスタム ActionFilterAttribute があること。また、すべてのイントラネット リクエストが 10.122.122.12 または 10.122.122.13 のいずれかの IP アドレスから送信されるとします。
次のように、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);
}
それがあなたを助けることを願っています!