RestClient 的 API 调用仅适用于 VisualStudio 中的调试

问题描述 投票:0回答:3

我正在实现一个 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;
    }

有人可以告诉我为什么它只能在调试模式下工作吗?

c# visual-studio async-await visual-studio-debugging
3个回答
0
投票

我猜你在某个地方失踪了。快速查看代码后,会发现 return vvariabe 'responseexecutionRecord ' 调用函数 getTokenListeners 中的 client.ExecuteAsync 方法,在执行异步方法时可以等待该方法。您可以删除 .result 并等待它。


0
投票

我也尝试过: Example Code

但检索仍然为空 Result


0
投票

我也有同样的问题。我生成 JWT,然后将其用私钥签名发送到 API,并且应该接收不记名令牌以对 API 进行授权。就我而言,我生成的令牌 JWT 有错误的时间策略 NotBefore。在调试模式下,时间过去了,JWT 已获得授权。

我通过使用 ExecutePost() 而不是 Post() 找出了导致问题的原因

© www.soinside.com 2019 - 2024. All rights reserved.