2017-01-31 6 views
5

मैं एक मध्यस्थ है, जो ग्राहक से अपवाद को छुपाता है और किसी भी अपवाद के मामले में 500 त्रुटि देता है:सेट प्रतिसाद स्थिति

public class ExceptionHandlingMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public ExceptionHandlingMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     try 
     { 
      await _next.Invoke(context); 
     } 
     catch (Exception exception) 
     { 
      var message = "Exception during processing request"; 
      using (var writer = new StreamWriter(context.Response.Body)) 
      { 
       context.Response.StatusCode = 500; //works as it should, response status 500 
       await writer.WriteAsync(message); 
       context.Response.StatusCode = 500; //response status 200 
      } 
     } 
    } 
} 

मेरे समस्या यह है कि, अगर मैं पहले प्रतिसाद स्थिति सेट किया गया है लेखन शरीर, ग्राहक इस स्थिति देखेंगे, लेकिन अगर मैं शरीर के लिए संदेश लिख के बाद स्थिति सेट, ग्राहक 200

किसी ने मुझसे समझा सकते हैं उसके होने का कारण स्थिति के साथ प्रतिक्रिया प्राप्त होगा?

पीएस मैं ASP.NET कोर 1.1

उत्तर

7

कि डिजाइन द्वारा है, जब आप जानते हैं कि कैसे काम करता है HTTP उपयोग कर रहा हूँ।

हेडर datastream के शुरू (wiki example देखें) कर रहे हैं। एक बार डेटा भेजने के बाद, आप हेडर को बदल/संशोधित नहीं कर सकते हैं, क्योंकि डेटा को तार पर पहले से ही भेज दिया गया है।

आप पूरी प्रतिक्रिया बफ़र होना आप बाद में इसे सेट करना चाहते हैं के लिए होता है, लेकिन इस स्मृति के उपयोग में वृद्धि। मेमोरी स्ट्रीम के लिए स्ट्रीम को स्वैप करने के तरीके पर a sample यहां।

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