2014-12-08 12 views
11

मैं वेब एपीआई के लिए मेरी asp.net परियोजना के लिए ASP.NET वेब एपीआई CacheOutput लाइब्रेरी का इस्तेमाल किया है से वेब एपीआई कैश अमान्य कैसे करें और यह ठीक काम कर रहा है, लेकिन से एक और नियंत्रक है जहां मेरे पास एक पोस्ट विधि है और मैं उस नियंत्रक से अपने कैश को अमान्य करना चाहता हूं।एक और नियंत्रक (ASP.NET वेब एपीआई CacheOutput लाइब्रेरी)

[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 
    } 
} 

कर्मचारी नियंत्रक में add \ update होने पर मैं कर्मचारी कैश को अमान्य करना चाहता हूं।

+0

मुझे यकीन है कि नहीं हूँ, लेकिन [NoCache] विशेषता मदद कर सकते हैं। –

+0

मैं कैश चाहते हैं, लेकिन बस रद्द करने के लिए जब वहाँ कर्मचारी नियंत्रक – Suresh

उत्तर

10

यह थोड़ा मुश्किल है, लेकिन आप इस तरह से प्राप्त कर सकते हैं: अपने WebApiConfig पर

1.:

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

हम GlobalConfiguration से IApiOutputCache प्राप्त करने के लिए इसके बारे में की आवश्यकता होगी। कॉन्फ़िगरेशन। प्रॉपर्टीज, अगर हम डिफ़ॉल्ट गुणों का सेटअप करते हैं तो IApiOutputCache के साथ संपत्ति एमवीसी बेसकंट्रोलर अनुरोध पर मौजूद नहीं होगी। तब

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., यह आपके EmployeesController.CreateEmployee कार्रवाई से फोन:

2. एक WebApiCacheHelper कक्षा बनाएं

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

धन्यवाद में परिवर्तन होता है तो चाहते हैं, लेकिन मैं ASP.Net 4.0 का उपयोग कर रहा हूँ और WebApi.OutputCache.V2 केवल ASP.net 4.5 में उपलब्ध है आप के लिए किसी भी अन्य सुझाव है एएसपी.NET 4.0 के साथ काम करते हैं? या मैं ASP.NET करने के लिए अपने समाधान 4.5 – Suresh

+0

मैं नहीं जानता कि उन्नत करने के लिए है, मैं एएसपी .NET 4.0 के साथ WebApi.OutputCache उपयोग नहीं किया है। – giacomelli

+0

लगता है कि आपका समाधान 4.5 के लिए काम करेगा क्योंकि यह मेरी समस्या का समाधान नहीं करता है लेकिन उत्तर आशा के रूप में स्वीकार करता है जो दूसरों की मदद करेगा। – Suresh

संबंधित मुद्दे