我正在实现一个 MVC 项目,它在后端调用不同的 Boomi Atomsphere API。
其中一个由两个异步调用组成。 第一个请求令牌 第二个使用令牌获取数据。 我正在使用 RestClient 来做到这一点。奇怪的是,在调试模式下它可以工作并获取所有值。 当我正常运行该项目时,我没有得到任何价值。
这是代码示例:
private async Task<ListenerDetails> getListenersForEnv(string atomID) {
var client = getClient();
var token = await getTokenListeners(atomID);
string resourceListenerRecord = "/async/ListenerStatus/response/"+ token;
var listenerRequestRecord = getRequest(resourceListenerRecord);
var responselistenerRecord = await client.ExecuteAsync(listenerRequestRecord);
var jsonoObjListenerRecord = JObject.Parse(responselistenerRecord.Content);
ListenerDetails model = new ListenerDetails();
model.listenerModel = mapper.Map<ListenerDetails>(jsonoObjListenerRecord).listenerModel;
model.numberOfResults = mapper.Map<ListenerDetails>(jsonoObjListenerRecord).numberOfResults;
var apiListenerResponse = !string.IsNullOrWhiteSpace(responselistenerRecord.Content) ? model : null;
var apiListenerResponseDocument = responselistenerRecord.StatusCode == HttpStatusCode.OK && apiListenerResponse != null ? apiListenerResponse : null;
return apiListenerResponseDocument;
}
private async Task<string> getTokenListeners( string atomID) {
var client = getClient();
string resourceTokenListenerRecord = "/async/ListenerStatus/query";
string requestTokenListenerRecord = "{\"QueryFilter\" : {\"expression\" :{\"argument\" : [\""+ atomID + "\"],\"operator\" : \"EQUALS\",\"property\":\"containerId\"}}}";
var listenerrequestRecord = getRequest(resourceTokenListenerRecord, requestTokenListenerRecord);
var responseexecutionRecord = client.ExecuteAsync(listenerrequestRecord).Result;
var jsonoObjexecutionRecord = JObject.Parse(responseexecutionRecord.Content);
var modelDetail = mapper.Map<ListenerAsyncOperationTokenResultModel>(jsonoObjexecutionRecord).asyncToken;
var apiResponseDocuments = !string.IsNullOrWhiteSpace(responseexecutionRecord.Content) ? modelDetail : null;
var apiResponseDocument = responseexecutionRecord.StatusCode == HttpStatusCode.Accepted && apiResponseDocuments != null ? apiResponseDocuments : null;
return Task.FromResult(apiResponseDocument.token).Result;
}
private RestRequest getRequest(string resource, string requestData) {
var request = new RestRequest(resource, Method.POST, DataFormat.Json);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
request.AddJsonBody(requestData);
return request;
}
private RestRequest getRequest(string resource)
{
var request = new RestRequest(resource, Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
return request;
}
有人可以告诉我为什么它只能在调试模式下工作吗?
我猜你在某个地方失踪了。快速查看代码后,会发现 return vvariabe 'responseexecutionRecord ' 调用函数 getTokenListeners 中的 client.ExecuteAsync 方法,在执行异步方法时可以等待该方法。您可以删除 .result 并等待它。
我也有同样的问题。我生成 JWT,然后将其用私钥签名发送到 API,并且应该接收不记名令牌以对 API 进行授权。就我而言,我生成的令牌 JWT 有错误的时间策略 NotBefore。在调试模式下,时间过去了,JWT 已获得授权。
我通过使用 ExecutePost() 而不是 Post() 找出了导致问题的原因