【问题标题】:WebClient - UploadValues : Get Status ResponseWebClient - UploadValues:获取状态响应
【发布时间】:2015-10-01 06:53:37
【问题描述】:

我正在尝试将值从一个控制器传递到另一个域中的另一个控制器。我正在将数据添加到 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;
}

【问题讨论】:

  • 我假设其他 域 在 IIS 或 Cassini/IIS Express 中?如果是这样,则该网站受 Windows 激活服务的控制,并会在连接进入时启动。更改您的客户端设置 url 以强制失败。 webclient 将在 http 状态码 400 及以上抛出WebException

标签: c# webclient


【解决方案1】:

你不应该因为这样的问题而使用WebClient。

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

HttpClient 是较新的 API,它具有以下优点

具有良好的异步编程模型

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

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

3- 如果您想在其他平台(.Net 4.0、Windows Phone 等)上使用它,还具有库的 xcopyable/portable-framework 版本。

所以我要给你看一个使用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 = await client.PostAsync(uri, content);

   // 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);
    }
}

【讨论】:

  • 让我查一下。如果我能重现
  • 哦,对不起!是我的错!我还在检查它! :-)
  • :-) 100% 有效!!感谢您的帮助和详细的评论和示例代码 sn-p!
猜你喜欢
  • 1970-01-01
  • 2013-02-27
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2021-08-28
相关资源
最近更新 更多