我是泛型新手,我正在尝试为我的项目制作一个泛型HTTP GET方法(并可能将其扩展为也可以处理POST / PUT)。当响应基于字符串时,以下内容似乎可以正常工作:
private async Task<T> HttpGetAsync<T>(Uri uri)
{
var httpRequestMessage = new HttpRequestMessage()
{
Method = HttpMethod.Get,
RequestUri = uri,
Headers =
{
{ "Authorization", $"Basic {encodedCredentials}"},
{ "Cache-Control", "no-cache" }
}
};
var response = await _httpClient.SendAsync(httpRequestMessage);
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(content);
}
但是在某些情况下,基于类型,我希望使用ReadAsByteArrayAsync()或ReadAsStreamAsync()而不是ReadAsStringAsync()读取响应。
我认为我可能可以在方法中执行getType(),并使用适当的方法读取响应,但是我想知道是否有更好的方法可以做到这一点?
这是一个不好的主意/泛型的错误用法吗?感谢您提供任何信息!
参考方案
使用界面:
interface IContentReader<T>
{
T ReadAsync(HttpResponseMessage response);
}
private async Task<T> HttpGetAsync<T>(Uri uri, IContentReader<T> reader)
{
var httpRequestMessage = new HttpRequestMessage()
{
Method = HttpMethod.Get,
RequestUri = uri,
Headers =
{
{ "Authorization", $"Basic {encodedCredentials}"},
{ "Cache-Control", "no-cache" }
}
};
var response = await _httpClient.SendAsync(httpRequestMessage);
return await reader.ReadAsync(response);
}
您可以使用IContentReader<T>
的不同实现。
您可以基于T
确定要使用的实现。
我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …
如何在Wiremock中为JUNIT匹配精确的json - java我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares…
jQuery DataTable TableTool在IE和Firefox中不起作用 - c#我在MVC4 ASP.NET Web应用程序中使用Jquery DataTable TableTool。导出到Excel和PDF可以与Chrome完美配合。但是不能在IE和FireFox中使用。我的代码如下 dom: 'T<"clear">lfrtip', tableTools: { "sSwfP…
如何通过Ajax将数据发送到不同的元素? - phpscript.js $(document).on("click", ".send", function (event) { $.ajax({ url: "update.php", data: { id: id, }, type: "POST", success: function…