0

私のプロジェクトでは、インターネットとイントラネットの 2 つのモードを処理する必要があります。ここで、モードに基づいてフィルターを適用する必要があります。モードに基づいてフィルターを適用する最良の方法は何ですか (条件付き)。

これを行う 1 つの方法は、カスタム フィルター プロバイダーを作成して登録することです。しかし、いつ、どのようにアプリケーション モードを確認できますか。

ありがとう -バブ

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);
  }
}

そして、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);
    }

それがあなたを助けることを願っています!

于 2013-12-03T11:58:19.940 に答える