में एक खाली प्रतिक्रिया का सामग्री-प्रकार सेट करना फ़ील्ड में मौजूद विरासत अनुप्रयोग का समर्थन करने के लिए, मुझे एक खाली प्रतिक्रिया वापस करने के लिए मेरे एएसपी.नेट एमवीसी ऐप की आवश्यकता है जिसमें Content-Type
भी है। आईआईएस, एएसपी.नेट, या एएसपी.नेट एमवीसी में से एक मेरे Content-Type
को हटा रहा है जब मैं एक शून्य प्रतिक्रिया भेजता हूं। क्या इसके आसपास कोई रास्ता है?एएसपी.नेट एमवीसी
संपादित (जबकि एक सेट के साथ एक खाली प्रतिक्रिया की आवश्यकता नहीं Content-Type
स्पष्ट रूप से आदर्श समाधान है, ग्राहकों को पहले से ही वहाँ बाहर हैं, और उनमें से कई उन्नत नहीं किया जा सकता है किया जाएगा।): के बाद से वहाँ एक था कोड के लिए अनुरोध: मैं नए वेब एप्लिकेशन से उस अनुरोध को प्रॉक्सी कर रहा हूं जिस पर पुराने ग्राहक भरोसा करते हैं। ऐसा करने के लिए, मेरे पास ActionResult
का सबक्लास है, जिसे LegacyResult
कहा जाता है, ताकि आप पुराने तरीकों से संभालने की आवश्यकता वाले उन तरीकों के लिए वापस आ सकें।
public override void ExecuteResult(ControllerContext context)
{
using (var legacyResponse = GetLegacyResponse(context))
{
var clientResponse = context.HttpContext.Response;
clientResponse.Buffer = false;
clientResponse.ContentType = legacyResponse.ContentType; /* Yes, I checked that legacyResponse.ContentType is never string.IsNullOrEmpty */
if (legacyResponse.ContentLength >= 0) clientResponse.AddHeader("Content-Length", legacyResponse.ContentLength.ToString());
var legacyInput = legacyResponse.GetResponseStream();
using (var clientOutput = clientResponse.OutputStream)
{
var rgb = new byte[32768];
int cb;
while ((cb = legacyInput.Read(rgb, 0, rgb.Length)) > 0)
{
clientOutput.Write(rgb, 0, cb);
}
clientOutput.Flush();
}
}
}
तो legacyInput
डेटा है, तो Content-Type
उचित रूप से सेट किया गया है: यह अपने कोड के प्रासंगिक हिस्सा है। अन्यथा, यह नहीं है। मैं वास्तव में वही अनुरोध के लिए एक खाली वी। खाली रिक्त प्रतिक्रिया भेजने के लिए पुरानी बैकएंड को जोड़ सकता हूं, और फिडलर में अंतर का निरीक्षण कर सकता हूं।
संपादित 2: परावर्तक साथ आसपास poking है कि, अगर हेडर बार हुआ है कि HttpResponse.Flush
कहा जाता है पर लिखा नहीं किया गया है, तो Flush
बाहर हेडर ही लिखते हैं पता चलता है। समस्या यह है कि यह केवल हेडर के एक छोटे से सबसेट लिखता है। गायब लोगों में से एक Content-Type
है। तो ऐसा लगता है कि, अगर मैं धारावाहिकों को धारा में मजबूर कर सकता हूं, तो मैं इस समस्या से बच सकता हूं।
, अपने कोड दिखाएं करें। –
मुझे आश्चर्य है कि क्या यह खाली स्ट्रीम फ्लश कर रहा है? यदि आप 'ContentType' सेट करने के बाद सब कुछ टिप्पणी करते हैं तो क्या होता है? –
'ContentType' के बाद सब कुछ टिप्पणी करने में कोई फर्क नहीं पड़ता; व्यवहार वही है। यह समाप्त होता है क्योंकि 'फ्लश' अभी भी बुलाया जाता है, लेकिन एएसपी.NET स्टैक में कहीं और। (दूसरे शब्दों में, ऐसा प्रतीत होता है कि किसी भी दुष्प्रभाव के साथ लाइन को हटाया जा सकता है, लेकिन ऐसा करने से व्यवहार में कोई बदलाव नहीं होता है।) –