2017-05-16 11 views
0

に基づいてキャッシュするCacheCowを使用した:私は私のコントローラで次のようになります。WEBAPIエンドポイントを持っているパラメータ

[HttpGet] 
    public IHttpActionResult GetPerson(
     string term = null, 
     string workspace = null) 
    { 
     try 
     { 
      logger.Info("AvPerson start: " + DateTime.Now); 
      if (term == null) 
      { 
       return BadRequest(); 
      } 

      ICoreAVData api = MvcApplication.Container.Resolve<ICoreAVData>(); 

      List<Person> persons = new List<Person>(); 
      persons.AddRange(api.GetAllPersonsForTerm(term, workspace)); 

      if (persons == null) 
      { 
       return NotFound(); 
      } 

      return Ok(persons); 
     } 
     catch (Exception) 
     { 
      return InternalServerError(); 
     } 
    } 

termパラメータは、常に異なるが、workspaceパラメータには、ユーザーに関連するものを表示することができます。ユーザーは自分のワークスペースを離れることはないので、そのパラメーターはユーザーの視点から一定です。

私は、Workspaceパラメータに基づいてCacheCowキャッシュを持つことができるのだろうかと思います。すなわち、 workspace1がそれをキャッシュする場合、workspace2がそれを別々にキャッシュします。

私は、ワークスペース固有のキャッシュを無効にするために何らかのロジックを追加する必要があることを認識しています。私はそれについて尋ねていない、私は私がそれをやる方法を知っていると信じているから。ワークスペースパラメータごとに別々のキャッシュエントリを持つことができるかどうかを知りたい。

config.Routes.MapHttpRoute(
      name: "avperson", 
      routeTemplate: "api/v1/avperson/{action}/{id}", 
      defaults: new { controller = "avperson", id = RouteParameter.Optional } 

     ); 

任意のアイデア:

ここでは、このコントローラのための私のルーティングの設定はありますか?

答えて

0

解決策はルーティングを変更することです。

config.Routes.MapHttpRoute(
     name: "avperson", 
     routeTemplate: "api/v1/{workspace}/avperson/{action}/{id}", 
     defaults: new { controller = "avperson", workspace = "all", id = RouteParameter.Optional } 
); 

これを実行すると、必要に応じて検証または無効化できる各作業領域ごとに別々のキャッシュエントリが作成されます。

関連する問題