gpt4 book ai didi

asp.net - c# 如何获取由 httpResponse.BinaryWrite 处理的流

转载 作者:行者123 更新时间:2023-12-03 01:15:22 25 4
gpt4 key购买 nike

我有以下方法在 HttpResponse 对象中写入流。

public HttpResponse ShowPDF(Stream stream)
{
MemoryStream memoryStream = (MemoryStream) stream;

httpResponse.Clear();
httpResponse.Buffer = true;
httpResponse.ContentType = "application/pdf";
httpResponse.BinaryWrite(memoryStream.ToArray());
httpResponse.End();

return httpResponse;

}

为了测试它,我需要恢复处理后的流。有没有办法从 httpResponse 对象读取流?

最佳答案

我有两个想法...一个是模拟 HttpResponse,另一个是模拟 Web 服务器。

<强>1。模拟 HttpResponse

我在知道你使用哪个模拟框架之前就写了这篇文章。以下是如何使用 TypeMock 测试您的方法。

这假设您将 httpResponse 变量传递给该方法,并按如下方式更改该方法:

public void ShowPDF(Stream stream, HttpResponse httpResponse)

当然,如果它是 Page 类的成员,您可以将其更改为将其传递给 Page 对象上的属性。

下面是如何使用假 HttpResponse 进行测试的示例:

internal void TestPDF()
{
FileStream fileStream = new FileStream("C:\\deleteme\\The Mischievous Nerd's Guide to World Domination.pdf", FileMode.Open);
MemoryStream memoryStream = new MemoryStream();
try
{
memoryStream.SetLength(fileStream.Length);
fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);

memoryStream.Flush();
fileStream.Close();

byte[] buffer = null;

var fakeHttpResponse = Isolate.Fake.Instance<HttpResponse>(Members.ReturnRecursiveFakes);
Isolate.WhenCalled(() => fakeHttpResponse.BinaryWrite(null)).DoInstead((context) => { buffer = (byte[])context.Parameters[0]; });

ShowPDF(memoryStream, fakeHttpResponse);

if (buffer == null)
throw new Exception("It didn't write!");
}
finally
{
memoryStream.Close();
}
}

<强>2。模拟 Web 服务器

也许您可以通过模拟 Web 服务器来做到这一点。这听起来可能很疯狂,但看起来并没有那么多代码。这里有一些关于在 IIS 之外运行 Web 窗体的链接。

Can I run a ASPX and grep the result without making HTTP request?

http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

关于asp.net - c# 如何获取由 httpResponse.BinaryWrite 处理的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com