我的asp中有以下WebClient。net mvc web应用程序:
using (WebClient wc = new WebClient()) // call the Third Party API to get the account id
{
string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken;
var json = await wc.DownloadStringTaskAsync(url);
}
那么,有人可以建议我如何将它从WebClient更改为HttpClient吗?
您可以编写以下代码:
string url = 'some url';
// best practice to create one HttpClient per Application and inject it
HttpClient client = new HttpClient();
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
using (HttpContent content = response.Content)
{
var json = content.ReadAsStringAsync().Result;
}
}
更新1:
如果您想用wait
关键字替换对Result
属性的调用,那么这是可能的,但您必须将此代码放入标记为async
的方法中,如下所示
public async Task AsyncMethod()
{
string url = 'some url';
// best practice to create one HttpClient per Application and inject it
HttpClient client = new HttpClient();
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
var json = await content.ReadAsStringAsync();
}
}
}
如果您错过了方法中的async
关键字,您可能会得到一个编译时错误,如下所示
“等待”运算符只能在异步方法中使用。考虑使用异步修饰符标记此方法,并将其返回类型更改为任务
更新2:
回答您关于将'WebClient'转换为'WebRequest'的原始问题,这是您可以使用的代码,...但是微软(和我)推荐你使用第一种方法(通过使用HttpClient)。
string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "GET";
using (WebResponse response = httpWebRequest.GetResponse())
{
HttpWebResponse httpResponse = response as HttpWebResponse;
using (StreamReader reader = new StreamReader(httpResponse.GetResponseStream()))
{
var json = reader.ReadToEnd();
}
}
如果使用C#8及以上版本,那么就可以编写非常优雅的代码
public async Task AsyncMethod()
{
string url = 'some url';
// best practice to create one HttpClient per Application and inject it
HttpClient client = new HttpClient();
using HttpResponseMessage response = await client.GetAsync(url);
using HttpContent content = response.Content;
var json = await content.ReadAsStringAsync();
} // dispose will be called here, when you exit of the method, be aware of that
更新3
要了解为什么建议使用isHttpClient
而不是WebRequest
和WebClient
,您可以参考以下链接。
在HttpClient和WebClient之间做出决定
http://www.diogonunes.com/blog/webclient-vs-httpclient-vs-httpwebrequest/
HttpClient与HttpWebRequest
中的WebClient和HTTPWebRequest类之间有什么区别。网
http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx
问题内容: 我是Aurelia的新手。 您将如何更改以下代码以提供虚拟HttpClient,例如json读取器,而不是仅提供静态json数据集,从而无需开发服务器。 问题答案: 要使原始文章中的演示代码达到可以替代HttpClient实现的状态,需要执行几个步骤。 在类的构造函数中删除配置代码… 这些行: users.js 应移至文件: main.js 现在我们的users.js文件应如下所示:
问题内容: 我正在创建一个Android应用程序,并通过HttpClient将数据从Android应用程序发送到servlet。我使用HttpPost方法。 我在Android开发人员网站上了解到,Apache HttpClient库在Android Froyo 2.2中存在一些错误,毕竟使用HttpUrlConnection而不是HttpPost是一个好习惯。所以我想将我的HttpPost代码转
问题内容: 我试图将字符串分成数组并替换为,但无法做到,我也尝试了String.replaceAll这样的东西。 我想提供一个通往JNI的路径,并且它只能以这种方式读取。 问题答案: 在这种情况下不要使用- 这是用正则表达式指定的,这意味着您需要更多的转义。这应该很好: 请注意,由于Java字符串文字中的原因,反斜杠加倍-因此此处涉及的 实际 字符串是“单反斜杠”和“双反斜杠”-而不是双倍和四倍。
我有以下布局 一切正常,但我想用一个片段替换浏览器 这不是重新调整ViewPager的间距,我该怎么办???
问题内容: 尝试简单地替换一些新行。尝试了3种不同的方法,但我没有任何改变: 这些都应该起作用,但是我仍然可以换行。它们是双精度的:“ \ r \ r”。那不应该让这些失败吗? 问题答案: 已经有在换行符之前 替换 插入* 标签的[]功能: ~~~~* 示例(键盘): 但是,如果仍然无法正常工作,请确保文本被双引号引起来。 那是因为单引号不会“扩展”转义序列,例如与双引号字符串相比。引用PHP文档
我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示: