WebClient - UploadValues:获取状态响应

时间:2015-10-01 06:53:37

标签: c# webclient

我正在尝试将值从控制器传递到另一个域中的另一个控制器。我将数据添加到NameValueCollection并将其传递给另一个控制器[httppost]方法,并接收映射到与我传递的模型相同的数据。

目前我通过同时打开两个VS实例在本地运行它。当两个VS都打开时,值正确传递并且信息正确写入db并且我收到类似“{byte [0]}”的响应。现在,当我尝试停止目标控制器项目并尝试提交数据时,它不会工作但仍然得到与“{byte [0]}”相同的响应。有人可以帮我在这种情况下如何返回响应命令。有没有办法了解UploadValues是否已完成。

.........
.........

NameValueCollection resumeDetails = new NameValueCollection(); 
resumeDetails.Add("FirstName", "KRIZTE");

byte[] res = this.Post(ConfigurationManager.AppSettings["RedirectionUrl"].ToString(), resumeDetails);

return View("Index");
}

public byte[] Post(string uri, NameValueCollection resumeDetails)
{
    byte[] response = null;
    WebClient client = new WebClient();
    response = client.UploadValues(uri, resumeDetails);
    return response;
}

1 个答案:

答案 0 :(得分:7)

由于此类问题,您不应使用WebClient

Microsoft将HttpClient类作为较新的API实现,它具有以下优点:

  

HttpClient是最新的API,它具有

的优点      

有一个很好的异步编程模型

     

1-由Henrik F Nielson工作,他基本上是HTTP的发明者之一,他设计了API,因此您可以轻松地遵循HTTP标准,例如:生成符合标准的标题

     

2-位于.Net框架4.5中,因此它对可预见的未来有一定程度的支持

     如果您想在其他平台上使用它,那么

3-还有该库的xcopyable / portable-framework版本 - .Net 4.0,Windows Phone等。

所以我要告诉你一个使用HttpClient的例子:

var uri = "http://google.com";

var client = new HttpClient();
try
{
   var values = new List<KeyValuePair<string, string>>();

   // add values to data for post
   values.Add(new KeyValuePair<string, string>("FirstName", "KRITZTE"));
   FormUrlEncodedContent content = new FormUrlEncodedContent(values);

   // Post data
   var result = client.PostAsync(uri, content).Result;

   // Access content as stream which you can read into some string
   Console.WriteLine(result.Content);

   // Access the result status code
   Console.WriteLine(result.StatusCode);
}
catch(AggregateException ex)
{
    // get all possible exceptions which are thrown
    foreach (var item in ex.Flatten().InnerExceptions)
    {
        Console.WriteLine(item.Message);
    }
}