无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 公司新闻 >

在ASP.NET Core里怎样应用HttpClient为目标的类撰写模

时间:2021-01-29 18:03来源:未知 作者:jianzhan 点击:
相信大伙儿针对在ASP.NET Core里怎样令其用HttpClient为目标的类撰写模块检测很很感兴趣,在此一篇文章中大家详尽的将实例、流程、全过程都一步一步的纪录在此,期待你看看到本文可以
相信大伙儿针对在ASP.NET Core里怎样令其用HttpClient为目标的类撰写模块检测很很感兴趣,在此一篇文章中大家详尽的将实例、流程、全过程都一步一步的纪录在此,期待你看看到本文可以有一定的获得。

两年前,微软公司引进了HttpClient类来取代HttpWebRequest来推送Web恳求。这一新的类更加容易于应用,更为简约,更具有有多线程性,且便于拓展。

HttpClient类有一个能够接纳HttpMessageHandler类目标的结构涵数。HttpMessageHandler类目标能够接纳一个恳求(HttpRequestMessage), 并回到响应(HttpResponseMessage)。它的作用彻底在于它的完成。默认设置状况下HttpClient应用的是HttpClientHandler,HttpClientHandler是一个解决程序,它向互联网网络服务器推送恳求并从网络服务器回到响应。在这篇博闻中,大家将根据承继DelegatingHandler来建立自身的HttpMessageHandler。

以便完成之上作用,HttpClient目标不能以立即应用,只是必须与容许应用IHttpClientFactory插口开展仿真模拟的依靠引入一起应用。

要我们来仿冒一个HttpMessageHandler

下边的事例中,大家只探讨HttpResponseMessage, 不容易解决HttpRequestMessage。

下列就是我仿冒的一个HttpMessageHandler目标。

public class FakeHttpMessageHandler : DelegatingHandler

{

private HttpResponseMessage _fakeResponse;

public FakeHttpMessageHandler(HttpResponseMessage responseMessage)

{

_fakeResponse = responseMessage;

}

protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

{

return await Task.FromResult(_fakeResponse);

}

}

这儿我加上了一个必须HttpResponseMessage结构涵数,随后复写了SendAsync方式, 在该方式中立即回到了结构涵数中国传媒大学入的HttpResponseMessage目标。

撰写一个应用IHttpClientFactory插口的服务

ASP.NET

下边大家必须撰写一个UserService类,这一类出示了一个GetUsers方式,来从远程控制网络服务器端获得客户目录。

public class UserService

{

private readonly IHttpClientFactory _httpFactory;

public UserService(IHttpClientFactory httpFactory)

{

_httpFactory = httpFactory;

}

public async Task GetUsers(string url)

{

using (HttpClient httpclient = _httpFactory.CreateClient())

{

using (HttpResponseMessage response = await httpclient.GetAsync(url))

{

if (response.StatusCode == HttpStatusCode.OK)

{

List users = await response.Content.ReadAsAsync

return users;

}

return null;

}

}

}

}

下列是Api恳求回到的客户类

public class User

{

public string FirstName { get; set; }

public string LastName { get; set; }

}

如你所闻,应用HttpClientFactory容许大家仿真模拟HttpClient案例化

检测服务

在下边的模块检测中,大家会应用XUnit、FluentAssertion、NSubstitute

检测情景1: 仿真模拟一个恳求,回到两个客户

public class UserServiceTests

{

[Fact]

public async Task WhenACorrectUrlIsProvided_ServiceShouldReturnAlistOfUsers()

{

// Arrange

var users = new List

{

new User

{

FirstName = John ,

LastName = Doe

},

new User

{

FirstName = John ,

LastName = Deere

}

};

var httpClientFactoryMock = Substitute.For();

var url = p>

var fakeHttpMessageHandler = new FakeHttpMessageHandler(new HttpResponseMessage() {

StatusCode = HttpStatusCode.OK,

Content = new StringContent(JsonConvert.SerializeObject(users), Encoding.UTF8, application/json )

});

var fakeHttpClient = new HttpClient(fakeHttpMessageHandler);

httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

// Act

var service = new UserService(httpClientFactoryMock);

var result = await service.GetUsers(url);

// Assert

result

.Should()

.BeOfType ()

.And

.HaveCount(2)

.And

.Contain(x = x.FirstName == John )

.And

.Contain(x = x.LastName == Deere )

.And

.Contain(x = x.LastName == Doe

}

}

在之上检测中,大家期待获得一个取得成功的响应,并获得两个客户的信息内容。

大家期待从Service中获得的数据信息是JSON文件格式的。

大家应用一个仿冒的解决程序原始化了一个HttpClient目标,随后界定了大家期待的获得的仿冒目标httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

检测情景2: 仿真模拟一个404不正确,回到空数据信息

public class UserServiceTests

{

[Fact]

public async Task WhenABadUrlIsProvided_ServiceShouldReturnNull()

{

// Arrange

var httpClientFactoryMock = Substitute.For();

var url = p>

var fakeHttpMessageHandler = new FakeHttpMessageHandler(new HttpResponseMessage() {

StatusCode = HttpStatusCode.NotFound

});

var fakeHttpClient = new HttpClient(fakeHttpMessageHandler);

httpClientFactoryMock.CreateClient().Returns(fakeHttpClient);

// Act

var service = new UserService(httpClientFactoryMock);

var result = await service.GetUsers(url);

// Assert

result

.Should()

.BeNullOrEmpty();

}

}

和检测情景1相近,当一个Http恳求回到Not Found, 它的結果集是Null

不知道道你看看完以后有什么感受呢?有木有获得到甚么新的专业知识,自身的实际操作是不是也进行了呢?期待大伙儿之后也多多的适用大家网站,这儿有很多丰富多彩的新闻资讯,给你大饱眼福哦。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信