2012-09-04 8 views
5

Chcę zweryfikować rozszerzenie pliku do przesłania w ASP.NET Web API (uwaga: zdaję sobie sprawę, że nie jest to pełnowartościowa metoda sprawdzania poprawności).Jak sprawdzać poprawność wysyłania plików w ASP.NET Web API

Używam MultipartFormDataStreamProvider do przetwarzania pliku POSTed. Ponieważ Request.Content.Headers.ContentDisposition ma wartość null, zanim dostawca przetworzy plik (przez ReadAsMultipartAsync), gdzie jest najlepsze miejsce do sprawdzenia poprawności nazwy pliku żądania?

Odpowiedz

7

Można dziedziczyć z MultipartFormDataStreamProvider i zastępować albo GetLocalFileName (działa po odczytaniu treści do strumienia) lub GetStream (działa przed odczytaniem treści do strumienia). W obu przypadkach masz dostęp do headers.ContentDisposition.FileName

public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider 
{ 
    public CustomMultipartFormDataStreamProvider(string path) 
     : base(path) 
    { 
    } 

    public override string GetLocalFileName(System.Net.Http.Headers.HttpContentHeaders headers) 
    { 
     //validate headers.ContentDisposition.FileName as it will have the name+extension 
     //then do something (throw error, continue with base or implement own logic) 
    } 

    public override Stream GetStream(HttpContent parent, System.Net.Http.Headers.HttpContentHeaders headers) 
    { 
     //validate headers.ContentDisposition.FileName as it will have the name+extension 

     //then do something (throw error, continue with base or implement own logic) 
    } 
}