2012-08-14 102 views
2

我有一個c#ashx處理程序檢測附加的文件。它工作正常。如何測試ASP NET ashx處理程序與文件連接

但是,我依靠第三方公司編寫軟件來發送文件給處理程序(長篇故事)。我需要測試我的處理程序是否有效,我們與第三方公司之間的時差會變成一場噩夢。

的情況是第三方軟件發送每30秒的文件處理程序,我需要測試這個工程並沒有冠冕堂皇的愚蠢,我想我問計算器:)

我只是想用測試設備來測試我的ashx處理程序或者不知道從哪裏開始。在「handler.ashx?filename = 12345.csv」中鍵入是有幫助的,但沒有附加實際的文件!

任何建議將是偉大的。

回答

4

從我的理解,你有一個ashx處理程序,你可以上傳文件,並且你想測試它。

我附加了一個示例測試,該測試假定使用POST請求獲取文件附件的ashx處理程序。

[TestMethod] 
public void TestCallUploadHandler() 
{ 
    const string FILE_PATH = "C:\\foo.txt"; 
    const string FILE_NAME = "foo.txt"; 
    string UPLOADER_URI = 
     string.Format("http://www.foobar.com/handler.ashx?filename={0}", FILE_NAME); 

    using (var stream = File.OpenRead(FILE_PATH)) 
    { 
     var httpRequest = WebRequest.Create(UPLOADER_URI) as HttpWebRequest; 
     httpRequest.Method = "POST"; 
     stream.Seek(0, SeekOrigin.Begin); 
     stream.CopyTo(httpRequest.GetRequestStream()); 

     var httpResponse = httpRequest.GetResponse(); 
     StreamReader reader = new StreamReader(httpResponse.GetResponseStream()); 
     var responseString = reader.ReadToEnd(); 

     //Check the responsestring and see if all is ok 
    } 
} 

基本上你正在做的是爲POST創建的WebRequest和FILESTREAM連接到其請求和文件名,它的查詢字符串。

+0

輝煌的感謝。怎麼樣增加安全性? – Rob 2012-08-14 15:44:14

+0

你在說什麼樣的安全性? – 2012-08-14 15:46:54

+0

對不起,它需要用戶名和密碼。有人在處理程序中編寫了代碼,因此它需要context.Request.Headers [「授權」] – Rob 2012-08-14 15:49:28

0

回答我的問題,非常感謝@parapura:

[TestMethod] 
public void TestCallUploadHandler() 
{ 
    const string FILE_PATH = "C:\\foo.txt"; 
    const string FILE_NAME = "foo.txt"; 
    string UPLOADER_URI = string.Format("http://www.foobar.com/handler.ashx?filename={0}", FILE_NAME); 

    using (var stream = File.OpenRead(FILE_PATH)) 
    { 
     var httpRequest = WebRequest.Create(UPLOADER_URI) as HttpWebRequest; 
     httpRequest.Method = "POST"; 
     NetworkCredential networkCredential = new NetworkCredential("username", "pwd"); 
     httpRequest.Credentials = networkCredential; 
     stream.Seek(0, SeekOrigin.Begin); 
     stream.CopyTo(httpRequest.GetRequestStream()); 

     byte[] authBytes = Encoding.UTF8.GetBytes("username:pwd".ToCharArray()); 
     httpRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes); 

     var httpResponse = httpRequest.GetResponse(); 
     StreamReader reader = new StreamReader(httpResponse.GetResponseStream()); 
     var responseString = reader.ReadToEnd(); 

     //Check the responsestring and see if all is ok 
    } 
}