我如何从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)
如果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
}