加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:22:30 所属栏目:asp.Net 来源:网络整理
导读:我有以下方法在HttpResponse对象中写入流. public HttpResponse ShowPDF(Stream stream) { MemoryStream memoryStream = (MemoryStream) stream; httpResponse.Clear(); httpResponse.Buffer = true; httpResponse.ContentType = "application/pdf"; httpRes
我有以下方法在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:deletemeThe Mischievous Nerd's Guide to World Domination.pdf",FileMode.Open);
    MemoryStream memoryStream = new MemoryStream();
    try
    {
        memoryStream.SetLength(fileStream.Length);
        fileStream.Read(memoryStream.GetBuffer(),(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读