Przy implementacji IStreamWriter i IHasOptions, które zwracają wynik image/jpeg, jeśli wystąpi błąd w WriteTo, globalna obsługa błędów w AppHost nie jest wywoływana, a nagłówek image/jpeg pozostaje, co powoduje błąd HTML (generowany przez ServiceStack) z nagłówkiem HTTP image/jpeg.Obsługa błędów za pomocą IStreamWriter & IHasOptions ServiceStack
Oto przykład, jak odtworzyć ten:
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"}
};
}
}
}
Od Opcji jest wywoływana przed writeTo, to nie jest możliwe, aby try/catch wewnątrz writeTo i zmienić Content-Type na przykład "application/json" i ręcznie zastąp odpowiedź błędu.
W jaki sposób można to zrealizować, aby odpowiedź HTTP zawierała wartość typu Content-Type błędu, a jako bonus, aby AppHost's ServiceExceptionHandler został wezwany do logowania?
Ma to sens; oznacza to, że istnieje kompromis pomiędzy przesyłaniem strumieniowym bezpośrednio do odpowiedzi lub lepszą obsługą błędów. Następnie powrócę do przywrócenia MemoryStream i napisania Response ContentType bezpośrednio w usłudze. Dzięki za pomoc! –