C#获取请求(API)-如何回调?(代表?)
我想对于我想做的事情,我需要某种回调/委托。目前,我花了大约8个小时阅读关于这些回调的内容,并观看了一些youtube视频,但我仍然不完全理解它们是如何工作的。(到目前为止,新的回调使用任何语言。) 单击按钮后,我调用该函数:C#获取请求(API)-如何回调?(代表?),c#,callback,delegates,request,http-get,C#,Callback,Delegates,Request,Http Get,我想对于我想做的事情,我需要某种回调/委托。目前,我花了大约8个小时阅读关于这些回调的内容,并观看了一些youtube视频,但我仍然不完全理解它们是如何工作的。(到目前为止,新的回调使用任何语言。) 单击按钮后,我调用该函数: private void btnLoad_Click(object sender, EventArgs e) { GetRequest("http://192.168.68.127/axis-cgi/param.cgi?action=list&group=
private void btnLoad_Click(object sender, EventArgs e)
{
GetRequest("http://192.168.68.127/axis-cgi/param.cgi?action=list&group=MediaClip", "root", "root");
}
以下是用于获取请求结果的函数:
public static async void GetRequest(string url, string user, string pass)
{
using (HttpClientHandler handler = new HttpClientHandler { Credentials = new System.Net.NetworkCredential(user, pass) })
{
using (HttpClient client = new HttpClient(handler))
{
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
string mycontent = await content.ReadAsStringAsync();
// --- Do different stuff with "mycontent", depending which button was clicked ---
// --- Insert function here ?! ---
}
}
}
}
}
现在我的问题是,我如何告诉“GetRequest(stringurl,stringuser,stringpass)”在我需要的地方执行特定的函数?
我想我需要一些东西,比如:
GetRequest(string url, string user, string pass, function())
使用
asyncwait
您不需要使用“回调”
更改方法以返回“等待”内容
使用
asyncwait
您不需要使用“回调”
更改方法以返回“等待”内容
委托
,该委托定义方法的签名属于
代表
。在这种情况下:返回值void
和no参数:
public delegate void yourdegate()代码>
定义应用于GetRequest
的回调函数:
public void CallbackFunction(){…}
在GetRequest
方法中定义一个参数以使用回调函数:
public void GetRequest(字符串url、字符串用户、字符串传递、您的委托回调){…}
在GetRequest
中调用回调:
callback.Invoke()
执行GetRequest
的示例:
GetRequest(“http://192.168.68.127/axis-cgi/param.cgi?action=list&group=MediaClip“,”根“,”根“,”调用函数)代码>
定义一个委托
,该委托定义方法的签名
属于代表
。在这种情况下:返回值void
和no
参数:
public delegate void yourdegate()代码>
定义应用于GetRequest
的回调函数:
public void CallbackFunction(){…}
在GetRequest
方法中定义一个参数以使用回调函数:
public void GetRequest(字符串url、字符串用户、字符串传递、您的委托回调){…}
在GetRequest
中调用回调:
callback.Invoke()
执行GetRequest
的示例:
GetRequest(“http://192.168.68.127/axis-cgi/param.cgi?action=list&group=MediaClip“,”根“,”根“,”调用函数)
此确切代码抛出:只能在异步方法中使用'wait'运算符。考虑将此方法标记为“AsiNC”修饰符并将其返回类型改为“任务”。< /代码> @ Alxg-不精确代码,您在方法声明中缺少“代码> Assic < /Cord>关键字”;我的方法是private静态异步任务HttpGet(int type=0){}
withreturn wait client.GetStringAsync(uri)我用string response=await-HttpGet()调用它
此确切代码抛出:只能在异步方法中使用'await'运算符。考虑将此方法标记为“AsiNC”修饰符并将其返回类型改为“任务”。< /代码> @ Alxg-不精确代码,您在方法声明中缺少“代码> Assic < /Cord>关键字”;我的方法是private静态异步任务HttpGet(int type=0){}
withreturn wait client.GetStringAsync(uri)我用string response=await-HttpGet()调用它代码>
public static async Task<string> GetRequest(string url,
string user,
string pass)
{
var credentials = new System.Net.NetworkCredential(user, pass);
using (var handler = new HttpClientHandler { Credentials = credentials })
{
using (var client = new HttpClient(handler))
{
using (var response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
return await content.ReadAsStringAsync();
}
}
}
}
}
string content = await GetRequest("url", "admin", "admin");
// Do staff with content