2013-02-25 76 views
8

मैं अपनी वेबसाइट पर जी ज़िप का उपयोग करना चाहते में ActionFilterAttribute उपयोग कर रहा है, मैं निम्नलिखित कोड googled एक नियंत्रक या एक क्रिया के लिए विशेषता।ASP.NET MVC Response.Filter अशक्त जब RegisterGlobalFilters()

[Compress] 
public class PostController : Controller 

मैं manully कोड के हर टुकड़े पर यह करने के लिए नहीं करना चाहते हैं, तो मैं

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new CompressAttribute()); 
} 

में इस विशेषता को पंजीकृत लेकिन जब मैं आवेदन चलाने के लिए, अपवाद कोड की इस पंक्ति पर आया था:

response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 

प्रतिक्रिया। फ़िल्टर शून्य है।

मैं जानना चाहता हूं कि यह क्यों हो रहा है और इसे कैसे हल किया जाए। धन्यवाद!

- अद्यतन:

मैंने पाया कि अपवाद होता है केवल जब नियंत्रक एक बच्चे कार्रवाई में शामिल है, और यह लागू किया जा रहा है।

उत्तर

5

मेरा समाधान सभी बच्चे की कार्रवाई को फ़िल्टर करना था।

if (filterContext.IsChildAction) return; 

इस विधि का उपयोग अपनी विधि के शीर्ष पर करें।

public class CompressAttribute : ActionFilterAttribute 
{  
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.IsChildAction) return; 

     ... 
    } 
} 

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

  • कोई संबंधित समस्या नहीं^_^