gpt4 book ai didi

c# - 通过请求传递自定义值以在 BeginGetResponse 回调中使用

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:29 25 4
gpt4 key购买 nike

我遇到这样一种情况,我需要通过 Web 请求发送自定义值,以便我可以在我的应用程序收到的响应中使用它。因为我的应用程序可能会发送多个请求,所以我正在使用 BeginGetResponse异步发送每个请求。

目前我正在使用私有(private)变量缓存值,然后在回调方法中访问它。我知道这是在自找麻烦,因为如果在我从上一个请求获得响应之前调用相同的方法,那么数据可能已经被更改。

我需要知道的是,在请求中传递数据以在响应中处理数据的最佳(标准)方式是什么?我最初的想法是自定义 header ,但我不确定...

这是我当时的代码:

public void SendRequestAsnyc(string param1, string param2, string uri, int id)
{
NameValueCollection @params = System.Web.HttpUtility.ParseQueryString(String.Empty);
@params.Add("param1", param1);
@params.Add("param2", param2);
byte[] data = UTF8Encoding.UTF8.GetBytes(@params.ToString());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
// take a note of data to be processed in the callback
_cachedId = id;
IAsyncResult ar = request.BeginGetResponse(new AsyncCallback(GetAsyncResponse), request);
}

private void GetAsyncResponse(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
if (request.HaveResponse)
{
var response = (HttpWebResponse)request.EndGetResponse(result);
var reader = new System.IO.StreamReader(response.GetResponseStream());
var data = reader.ReadToEnd();
// process data
// use _cachedId here to update database with response
}
}

最佳答案

您需要创建一个包含 request 的新对象和 id .在以前的 C# 版本中,您可以使用对象数组或可能的匿名对象来执行此操作。以下是使用对象数组执行此操作的方法:

IAsyncResult ar = request.BeginGetResponse(GetAsyncResponse, new object[] {request, id});

private void GetAsyncResponse(IAsyncResult result)
{
object[] params = (object[])result.AsyncState;
HttpWebRequest request = (HttpWebRequest)params[0];
int id = (int)params[1];
// process here
}

对于 C# 4.0,您可以使用 Tuple<HttpWebRequest, int> .

关于c# - 通过请求传递自定义值以在 BeginGetResponse 回调中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com