2013-05-11 45 views
5

Bir görüntü/jpeg sonucu döndüren bir IStreamWriter ve IHasOptions uygulamasıyla, WriteTo'da bir hata oluşursa, AppHost'daki global hata işleyicisi çağrılmaz ve resim/jpeg başlığı kalır. bir resim/jpeg HTTP Üstbilgisi ile bir HTML hatası (ServiceStack tarafından oluşturulmuş) ile sonuçlanır. Seçenekler yana ServiceStack'ın IStreamWriter & IHasOptions ile işleme sırasında hata oluştu

public class SampleStreamWriter : IStreamWriter, IHasOptions 
{ 
    void WriteTo(Stream responseStream) 
    { 
     // This would actually be a delegate 
     throw new ApplicationException("..."); 
    } 

    public IDictionary<string, string> Options 
    { 
     get 
     { 
      return new Dictionary<string, string> 
       { 
        {HttpHeaders.ContentType, "image/jpeg"} 
       }; 
     } 
    } 
} 

WriteTo önce denir

, WriteTo iç/catch denemek ve özellikle örneğin Content-Type değiştirmek mümkün değildir: Burada

bu yeniden nasıl bir örnek "application/json", ve manuel olarak hata yanıtını geçersiz kılın.

bu uygulanabilir nasıl HTTP Yanıt AppHost en ServiceExceptionHandler günlük çağrılır olduğunu, hatanın Content-Type değeri vardır ve bir bonus olarak böylece?

cevap

2

CompressedFileResult sınıf o IStreamWriter ve IHasOptions devralır olarak bakmak iyi bir örnek olabilir. yanı (StreamWriterResult, ImageResult) IStreamWriter devralan testlerde kullanılan birkaç diğer sınıflar vardır. Bunların yararlı olduğuna emin değilim.

Basit cevap, 'WriteTo' yöntemi çağrılmadan önce her şeyi (Doğrulama, Görüntü al, byte[], vb.) Yapmaktır. senin Try/Catch senin Hizmet içinde ise, istisna yukarı itmek ve zaten sağlanan İstisna işlemeyi kullanabilirsiniz. Açıkçası, bu, WriteTo bir istisna atarken yardımcı olmaz, ancak bu noktada Pipeline'da Yanıt işleme noktasını geçtiniz gibi görünüyor.

+1

Bu mantıklı; Bu, doğrudan doğruya yanıt veya daha iyi hata işleme akışı arasında bir anlaşma yapmak anlamına gelir. Sonra bir MemoryStream dönen ve hizmette doğrudan Tepki ContentType'ı yazma son çare olacaktır. Yardım ettiğin için teşekkür ederim! –

İlgili konular