相关疑难解决方法(0)

在HttpClient和WebClient之间做出决定

我们的网络应用程序在.Net Framework 4.0中运行.UI通过ajax调用调用控制器方法.

我们需要从供应商处使用REST服务.我正在评估在.Net 4.0中调用REST服务的最佳方法.REST服务需要基本身份验证方案,它可以返回XML和JSON中的数据.没有要求上传/下载大量数据,我将来也看不到任何东西.我看了几个用于REST消费的开源代码项目,并没有找到任何值来证明项目中的额外依赖性.开始评估WebClientHttpClient.我从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 c# rest webclient dotnet-httpclient

204
推荐指数
6
解决办法
12万
查看次数

.NET中的WebClient和HTTPWebRequest类之间有什么区别?

.NET中WebClientHttpWebRequest类与.NET 之间有什么区别?他们都做了非常相似的事情.实际上,为什么不将它们合并到一个类中(太多的方法/变量等可能是一个原因,但.NET中有其他类违反了该规则).

谢谢.

.net c# webclient httpwebrequest

176
推荐指数
3
解决办法
17万
查看次数

如何在C#中下载HTML源代码?

如何在c#中获取给定网址的HTML源代码?

c#

102
推荐指数
5
解决办法
16万
查看次数

HttpClient与HttpWebRequest

我有一个大文件,我必须发送到web api客户端...数据是多部分.问题是,如果文件是通过http Web请求发送的,那么它会在webapi上快速上传.对于此请求,文件内容将直接写入请求流.

就好像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢.我在Httpclient post async中使用multipartformdatacontent.

那么,对于大文件,我们是否只能使用Web请求?或者Httpclient上是否有任何设置可以加快上传速度?

c#-4.0 asp.net-web-api dotnet-httpclient

42
推荐指数
3
解决办法
4万
查看次数

如何从Httpclient.SendAsync调用获取和打印响应

我正在尝试从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”,获取并打印响应的首选方式吗?我不确定哪种方法是正确的。

c# asynchronous httpclient

3
推荐指数
1
解决办法
2万
查看次数