我们的网络应用程序在.Net Framework 4.0中运行.UI通过ajax调用调用控制器方法.
我们需要从供应商处使用REST服务.我正在评估在.Net 4.0中调用REST服务的最佳方法.REST服务需要基本身份验证方案,它可以返回XML和JSON中的数据.没有要求上传/下载大量数据,我将来也看不到任何东西.我看了几个用于REST消费的开源代码项目,并没有找到任何值来证明项目中的额外依赖性.开始评估WebClient和HttpClient.我从NuGet下载了用于.Net 4.0的HttpClient.
我搜索了WebClient和之间的差异,HttpClient并且该网站提到单个HttpClient可以处理并发调用,它可以重用已解析的DNS,cookie配置和身份验证.我还没有看到由于差异我们可能获得的实用价值.
我做了一个快速的性能测试,以找到WebClient(同步调用),HttpClient(同步和异步)如何执行.以下是结果:
HttpClient对所有请求使用相同的实例(min - max)
WebClient同步:8毫秒 - 167毫秒
HttpClient同步:3毫秒 - 7228毫秒
HttpClient异步:985 - 10405毫秒
HttpClient为每个请求使用new (min - max)
WebClient同步:4毫秒 - 297毫秒
HttpClient同步:3毫秒 - 7953毫秒
HttpClient异步:1027 - 10834毫秒
public class AHNData
{
public int i;
public string str;
}
public class Program
{
public static HttpClient httpClient = new HttpClient();
private static readonly string _url = "http://localhost:9000/api/values/";
public …Run Code Online (Sandbox Code Playgroud) .NET中WebClient的HttpWebRequest类与.NET 之间有什么区别?他们都做了非常相似的事情.实际上,为什么不将它们合并到一个类中(太多的方法/变量等可能是一个原因,但.NET中有其他类违反了该规则).
谢谢.
我有一个大文件,我必须发送到web api客户端...数据是多部分.问题是,如果文件是通过http Web请求发送的,那么它会在webapi上快速上传.对于此请求,文件内容将直接写入请求流.
就好像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢.我在Httpclient post async中使用multipartformdatacontent.
那么,对于大文件,我们是否只能使用Web请求?或者Httpclient上是否有任何设置可以加快上传速度?
我正在尝试从HTTP请求中获取响应,但是我似乎无法。我尝试了以下方法:
public Form1() {
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("someUrl");
string content = "someJsonString";
HttpRequestMessage sendRequest = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress);
sendRequest.Content = new StringContent(content,
Encoding.UTF8,
"application/json");
Run Code Online (Sandbox Code Playgroud)
发送消息:
...
client.SendAsync(sendRequest).ContinueWith(responseTask =>
{
Console.WriteLine("Response: {0}", responseTask.Result);
});
} // end public Form1()
Run Code Online (Sandbox Code Playgroud)
使用此代码,我可以获取状态代码和一些标头信息,但无法获取响应本身。我也尝试过:
HttpResponseMessage response = await client.SendAsync(sendRequest);
Run Code Online (Sandbox Code Playgroud)
但是我被告知要创建一个如下所示的异步方法来使其工作
private async Task<string> send(HttpClient client, HttpRequestMessage msg)
{
HttpResponseMessage response = await client.SendAsync(msg);
string rep = await response.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)
这是发送“ HttpRequest”,获取并打印响应的首选方式吗?我不确定哪种方法是正确的。