使用模拟的HttpClient

时间:2017-12-15 14:25:23

标签: c#

目前,我正在通过使用HttpClient进行HTTP调用来检索文件。

mRetriever = new MyRetriever(new HttpClient());
result = mRetriever.MyRetriever("https://some.url/myFile.js");

我想嘲笑这个电话。看了here后,我将其添加到我的代码中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace MyTestModule
{
    public class FakeResponseHandler : DelegatingHandler
    {
        private readonly Dictionary<Uri, HttpResponseMessage> _FakeResponses = new Dictionary<Uri, HttpResponseMessage>();

        public void AddFakeResponse(Uri uri, HttpResponseMessage responseMessage)
        {
            _FakeResponses.Add(uri, responseMessage);
        }

        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            if (_FakeResponses.ContainsKey(request.RequestUri))
            {
                return _FakeResponses[request.RequestUri];
            }
            else
            {
                return new HttpResponseMessage(HttpStatusCode.NotFound) { RequestMessage = request };
            }

        }
    }
}

但是,我不确定如何继续前进:

我添加了这段代码,其中myLocalFile是我想要作为回复返回的文件。

FakeResponseHandler fakeResponseHandler = new FakeResponseHandler();
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.AddHeader("content-disposition", "attachment;filename=" + "./myLocalFile");
fakeResponseHandler.AddFakeResponse(new Uri("https://some.url/myFile.js"), response);

Mock<HttpClient> mockHttpClient = new Mock<HttpClient>();
HttpClient httpClient = new HttpClient(fakeResponseHandler);

然而,我不知道:

1.如何在代码中引用本地文件系统中的文件。

2.如何将该文件添加到HttpResponseMessage

目前我正在这样做:

response.AddHeader("content-disposition", "attachment;filename=" + "./myLocalFile");

抛出此错误:

  

'HttpResponseMessage'不包含'AddHeader'的定义   没有扩展方法'AddHeader'接受第一个类型的参数   可以找到'HttpResponseMessage'(你错过了一个using指令吗?   或汇编参考?)

0 个答案:

没有答案