2014-12-08 6 views
11

Ich habe ASP.NET Web API CacheOutput-Bibliothek für mein ASP.net-Projekt für Web-API verwendet und es funktioniert gut, aber haben einen anderen Controller wo ich eine POST-Methode habe und ich möchte meinen Cache von diesem Controller ungültig machen.Wie Web-API-Cache von einem anderen Controller ungültig machen (ASP.NET-Web-API-CacheOutput-Bibliothek)

[AutoInvalidateCacheOutput] 
public class EmployeeApiController : ApiController 
{ 
    [CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100)] 
    public IEnumerable<DropDown> GetData() 
    { 
     //Code here 
    } 
} 


public class EmployeesController : BaseController 
{ 
    [HttpPost] 
    public ActionResult CreateEmployee (EmployeeEntity empInfo) 
    { 
     //Code Here 
    } 
} 

würde Ich mag Mitarbeiter Cache ungültig zu machen, wenn es in Mitarbeiter-Controller hinzufügen \ Update ist.

+0

Ich bin nicht sicher, aber [NoCache] Attribut kann helfen. –

+0

Ich möchte Cache, aber möchte nur ungültig machen, wenn es in Mitarbeiter-Controller gibt – Suresh

Antwort

10

Es ist etwas schwierig, aber man kann es auf diese Weise erhalten:

1. Auf Ihrem WebApiConfig:

// Registering the IApiOutputCache.  
var cacheConfig = config.CacheOutputConfiguration(); 
cacheConfig.RegisterCacheOutputProvider(() => new MemoryCacheDefault()); 

Wir werden es brauchen die IApiOutputCache von GlobalConfiguration zu bekommen. Configuration.Properties, wenn wir das Setup der Standardeigenschaften zulassen, ist die Eigenschaft mit dem IApiOutputCache nicht in der MVC BaseController-Anfrage vorhanden.

2. Erstellen Sie eine WebApiCacheHelper Klasse:

using System; 
using System.Web.Http; 
using WebApi.OutputCache.Core.Cache; 
using WebApi.OutputCache.V2; 

namespace MideaCarrier.Bss.WebApi.Controllers 
{ 
    public static class WebApiCacheHelper 
    { 
     public static void InvalidateCache<T, U>(Expression<Func<T, U>> expression) 
     { 
      var config = GlobalConfiguration.Configuration; 

      // Gets the cache key. 
      var outputConfig = config.CacheOutputConfiguration(); 
      var cacheKey = outputConfig.MakeBaseCachekey(expression); 

      // Remove from cache. 
      var cache = (config.Properties[typeof(IApiOutputCache)] as Func<IApiOutputCache>)(); 
      cache.RemoveStartsWith(cacheKey); 
     } 
    } 
} 

3. Dann rufen Sie es von Ihrem EmployeesController.CreateEmployee Aktion:

public class EmployeesController : BaseController 
{ 
    [HttpPost] 
    public ActionResult CreateEmployee (EmployeeEntity empInfo) 
    { 
     // your action code Here. 
     WebApiCacheHelper.InvalidateCache((EmployeeApiController t) => t.GetData()); 
    } 
} 
+0

Danke, aber ich benutze ASP.Net 4.0 und WebApi.OutputCache.V2 ist nur in ASP.net 4.5 haben Sie einen anderen Vorschlag für Arbeitet mit ASP.Net 4.0? oder ich muss meine Lösung zu asp.net 4.5 aktualisieren – Suresh

+0

Ich weiß nicht, ich habe WebApi.OutputCache nie mit ASP .NET 4.0 verwendet. – giacomelli

+0

Scheint Ihre Lösung wird für 4,5 arbeiten, da es mein Problem nicht gelöst hat, sondern als Antwort hoffe, dass es anderen hilft. – Suresh

Verwandte Themen