2012-09-04 91 views
5

我想驗證ASP.NET Web API中文件上傳的文件擴展名(注意:我知道這不是一種全面的驗證方法)。我使用MultipartFormDataStreamProvider來處理POST文件。由於Request.Content.Headers.ContentDisposition在提供程序處理文件(通過ReadAsMultipartAsync)之前爲空,哪裏是驗證請求文件名的最佳位置?如何驗證ASP.NET Web API中的文件上傳

回答

7

您可以從MultipartFormDataStreamProvider繼承並覆蓋GetLocalFileName(在將內容讀入流中之後運行)或GetStream(在將內容讀入流之前運行)。在這兩種情況下,您都可以訪問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) 
    } 
}