Używam Web API do strumieniowania dużych plików do klientów, ale chcę się zalogować, jeśli pobieranie się powiodło, czy nie. Oznacza to, że jeśli serwer wysłał całą zawartość pliku.Czy jest powiadomienie, gdy ASP.NET Web API zakończy wysyłanie do klienta
Czy istnieje sposób uzyskania wywołania zwrotnego lub zdarzenia, gdy HttpResponseMessage
kończy wysyłanie danych?
Może coś takiego:
var stream = GetMyStream();
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
// This doesn't exist, but it illustrates what I'm trying to do.
response.OnComplete(context =>
{
if (context.Success)
Log.Info("File downloaded successfully.");
else
Log.Warn("File download was terminated by client.");
});
Nie jestem pewien, czy zadziała, gdy będę w metodach działania ApiController. O ile wiem, nic się nie dzieje, dopóki nie zwrócę 'HttpResponseMessage'. – ligos
@ligos Czy możesz zrobić test? - innym, co lubię mówić, czy możesz zapisać swoje dane w pętli małymi partiami z buforem i sprawdzić, czy ostateczne pobranie jest takie samo jak rozmiar pliku? – Aristos
Tak, jutro przeprowadzę test. Aha, i po stronie klienta będzie i tak skrót SHA256 pliku, więc mam integralność plików objętych. – ligos