Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#获取请求(API)-如何回调?(代表?)_C#_Callback_Delegates_Request_Http Get - Fatal编程技术网

C#获取请求(API)-如何回调?(代表?)

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=

我想对于我想做的事情,我需要某种回调/委托。目前,我花了大约8个小时阅读关于这些回调的内容,并观看了一些youtube视频,但我仍然不完全理解它们是如何工作的。(到目前为止,新的回调使用任何语言。)

单击按钮后,我调用该函数:

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){}
    with
    return wait client.GetStringAsync(uri)string response=await-HttpGet()调用它
    此确切代码抛出:
    只能在异步方法中使用'await'运算符。考虑将此方法标记为“AsiNC”修饰符并将其返回类型改为“任务”。< /代码> @ Alxg-不精确代码,您在方法声明中缺少“代码> Assic < /Cord>关键字”;我的方法是
    private静态异步任务HttpGet(int type=0){}
    with
    return 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