2012-08-14 99 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 
    } 
}