我如何从UploadStringTaskAsync调用中检索传递的数据

本文关键字:检索 数据 调用 UploadStringTaskAsync | 更新日期: 2023-09-27 18:12:16

我有以下web客户端:-

using (WebClient wc = new WebClient())
   {
 var url = currentURL+ "home/scanserver";
 wc.Headers.Add("Authorization", token);
 var json =wc.UploadStringTaskAsync(url, "FQDN=allscan");
   }

现在我正在传递一个安全令牌&一个名为FQDN的数据。因此,在接收器Post操作方法上,我无法检索FQDN参数,

我尝试了以下操作,但没有成功

string FQDN = Request.Form["FQDN"];

我还尝试在动作方法参数中定义FQDN,如下所示:- public async Task<ActionResult> ScanServer(string FQDN)

我如何从UploadStringTaskAsync调用中检索传递的数据

如果FQDN是query parameter,则尝试

using (WebClient wc = new WebClient())
{
  var url = currentURL+ "home/scanserver?FQDN=allscan";
  wc.Headers.Add("Authorization", token);
  var json =wc.UploadStringTaskAsync(url, "");
}

编辑

使用UploadValuesTaskAsync方法作为表单发布。

var url = currentURL+ "home/scanserver";
var args = new NameValueCollection { { "FQDN", "allscan" } };
var json = wc.UploadValuesTaskAsync(url, args);

json现在是Task<byte>而不是Task<string>,所以你必须把它转换成string;就像

var s = Encoding.Utf8.GetString(json.Result);

UploadStringTaskAsync的返回值为Task<string>。您需要等待返回的任务,添加延续,或者阻塞线程以等待返回的结果。

阻塞方法:

using (WebClient wc = new WebClient())
{
    var url = currentURL+ "home/scanserver";
    wc.Headers.Add("Authorization", token);
    var json = wc.UploadStringTaskAsync(url, "FQDN=allscan").Result;
}

使用await(必须在标记为async的方法中):

string json;
using (WebClient wc = new WebClient())
{
    var url = currentURL + "home/scanserver";
    wc.Headers.Add("Authorization", token);
    json = await wc.UploadStringTaskAsync(url, "FQDN=allscan");
}

对于一个简单的查询参数,您可以像@Richard所说的那样做

using (WebClient wc = new WebClient())
{
    var url = currentURL+ "home/scanserver?FQDN=allscan";
    wc.Headers.Add("Authorization", token);
    var json =wc.UploadStringTaskAsync(url, "");
}

或者,如果你想发送一个长字符串,或者一个复杂的对象MyObject,那么你可以这样做

using (WebClient wc = new WebClient())
{
    var url = currentURL+ "home/scanserver";
    wc.Headers.Add("Authorization", token);
    wc.Headers[HttpRequestHeader.ContentType] = "application/json";
    //here you can also pass a json serialized complex object
    var json =wc.UploadStringTaskAsync(url, "{FQDN:'allscan'}"); 
}

我这里假设,你的api方法看起来像

public void scanserver(string FQDN) //OR (MyClass myObject)
{
    //do something with token and FQDN 
    //OR use your complex object - myObject
}