相关疑难解决方法(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万
查看次数

在WebAPI客户端中每次调用创建一个新的HttpClient的开销是多少?

HttpClientWebAPI客户端的生命周期应该是多少?为多个调用
设置一个实例是否更好HttpClient

创建和处理HttpClient每个请求的开销是多少,如下面的示例所示(摘自http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from- a-net-client):

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:9000/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    // New code:
    HttpResponseMessage response = await client.GetAsync("api/products/1");
    if (response.IsSuccessStatusCode)
    {
        Product product = await response.Content.ReadAsAsync<Product>();
        Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

152
推荐指数
4
解决办法
6万
查看次数

从URL下载/流文件 - asp.net

我需要流式传输一个文件,这将导致在浏览器中保存为提示.问题是,文件所在的目录是虚拟映射的,因此我无法使用Server.MapPath来确定它的实际位置.该目录与网站不在同一位置(甚至在实时盒上的物理服务器上).

我想要像下面这样的东西,但这将允许我传递一个Web URL,而不是一个服务器文件路径.

我可能不得不最终从配置基本路径构建我的文件路径,然后追加到路径的其余部分,但希望我可以这样做.

var filePath = Server.MapPath(DOCUMENT_PATH);

if (!File.Exists(filePath))
    return;

var fileInfo = new System.IO.FileInfo(filePath);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", filePath));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.WriteFile(filePath);
Response.End();
Run Code Online (Sandbox Code Playgroud)

c# asp.net streaming file-io

66
推荐指数
6
解决办法
26万
查看次数

使用C#从API下载PDF文件

好的,所以我正在创建一个控制台应用程序

  1. 连接到供应商API,以便在两个日期之间提取已提交费用的凭证号码
  2. 下载随费用提交的收据的PDF副本

第一部分,我工作得很好.我能够连接到Vendor API并解析返回的XML,以使用以下代码创建一个凭证编号数组(需要获取PDF图像):

static async Task RunAsyncCR()
        {
            using (var client = new HttpClient())
            {
                var values = new Dictionary<string, string>
                {
                    {"un","SomeUser"},
                    {"pw","SomePassword"},
                    {"method","getVoucherInvoices"},
                    {"fromDate","05/30/2016"},
                    {"toDate", "06/13/2016"}
                };

                var content = new FormUrlEncodedContent(values);

                Console.WriteLine("Connecting...");

                var response = await client.PostAsync("https://www.chromeriver.com/receipts/doit", content);

                Console.WriteLine("Connected...");

                var responseString = await response.Content.ReadAsStringAsync();

                char[] DelimiterChars = {'<'};

                String[] xmlReturn = responseString.Split(DelimiterChars);

                string[] VoucherNumber = new string[500];

                int i = 0;

                foreach (string s in xmlReturn)
                {
                    if (s.Contains("voucherInvoice>") && s != "/voucherInvoice>\n    ")
                    { …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-web-api

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