मुझे HTML आउटपुट कैप्चर करने, इसे स्ट्रिंग में बदलने के लिए एक क्रिया पर निम्न फ़िल्टर मिला है, स्ट्रिंग को संशोधित करने के लिए कुछ ऑपरेशन करें, और नई सामग्री के साथ ContentResult को वापस करें स्ट्रिंग। दुर्भाग्य से, मैं एक खाली स्ट्रिंग के साथ समाप्त रहता है।नियंत्रक एक्शन फ़िल्टर के साथ एचटीएमएल आउटपुट कैप्चर करना
private class UpdateFilter : ActionFilterAttribute
{
private Stream stream;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
stream = filterContext.HttpContext.Response.Filter;
stream = new MemoryStream();
filterContext.HttpContext.Response.Filter = stream;
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
StreamReader responsereader = new StreamReader(filterContext.HttpContext.Response.Filter); //empty stream? why?
responsereader.BaseStream.Position = 0;
string response = responsereader.ReadToEnd();
ContentResult contres = new ContentResult();
contres.Content = response;
filterContext.Result = contres;
}
}
मैं नीचे पिन कर दिया है कि StreamReader (धारा) .ReadToEnd() एक खाली स्ट्रिंग देता है, लेकिन मैं बाहर क्यों समझ नहीं सकता।
कोई विचार यह कैसे ठीक करें?
संपादित करें: मैंने ऑनएक्शन एक्स्क्लेटेड टू ऑनरसल्ट एक्स्क्टेडड को बदल दिया है, और अब व्यू उत्पन्न होने के बाद इसे कॉल किया गया है, लेकिन स्ट्रीम अभी भी खाली है!
एक चेतावनी है: एक्शन फ़िल्टर में इंस्टेंस चर का उपयोग करने की अनुशंसा नहीं की जाती है। आपको प्रत्येक अनुरोध पर ActionFilterAttribute का एक नया उदाहरण प्राप्त करने की गारंटी नहीं है। मैंने इस जवाब से मेरा कोड आधारित किया और प्रति सेकंड हजारों अनुरोधों के साथ उत्पादन में जाने पर परेशानी हो गई - तार (धागे) पार हो रहे थे। filterContext.HttpContext.Items में इंस्टेंस चर को संग्रहीत करें जैसा कि इस पोस्ट में सुझाया गया है: http: // stackoverflow।कॉम/ए/8937793/14044 9 – jaminto