Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
.net HttpClient在异常后丢失DefaultRequestHeaders_.net_Rest_Asp.net Mvc 5_Request Headers - Fatal编程技术网

.net HttpClient在异常后丢失DefaultRequestHeaders

.net HttpClient在异常后丢失DefaultRequestHeaders,.net,rest,asp.net-mvc-5,request-headers,.net,Rest,Asp.net Mvc 5,Request Headers,我有一个项目正在与后端java服务器(REST)进行通信,以进行所有相关的业务操作。我正在使用HttpClient发送请求。 我的问题在于:如果请求失败,即在几乎所有对服务器的rest调用中,都会从.Result引发AggregateException,其中包含“任务已取消”。我的HttpClient实例将丢失Accept和Accept语言DefaultRequestHeader。 我在实例化客户机的方式上尝试了许多不同的变化,无论是作为一个静态类还是通过webconfig,但这种情况在所有情况

我有一个项目正在与后端java服务器(REST)进行通信,以进行所有相关的业务操作。我正在使用HttpClient发送请求。 我的问题在于:如果请求失败,即在几乎所有对服务器的rest调用中,都会从.Result引发AggregateException,其中包含“任务已取消”。我的HttpClient实例将丢失Accept和Accept语言DefaultRequestHeader。 我在实例化客户机的方式上尝试了许多不同的变化,无论是作为一个静态类还是通过webconfig,但这种情况在所有情况下都会发生,我对此一无所知。 请参阅下面的代码。 我从我的web.Config加载属性,这是正确填写的我的对象(从中获取):

}

我这样给我的客户打电话:

private HttpClient client = AthenaHttpClients.GetClient();
这是我对后端服务器的一个调用:

internal HttpResponseMessage getStudyContract(string id)
    {
        try
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", (string)HttpContext.Current.Session["accessToken"]);
            HttpResponseMessage response = client.GetAsync(restEndpoint + restStudyContractsEndpoint + "/" + id).Result;
            return response;
        }
        catch (AggregateException ex)
        {
            throw new RestHttpClientRequestException(restRequestExceptionMessage, ex.StackTrace);
        }
        catch (Exception ex)
        {
            throw new RestHttpClientRequestException(ex.Message, ex.StackTrace);
        }
    }

(我知道它不是使用带有.Result的异步方法的最佳实现,但目前还可以)。我通过发送一个带有空字符串的Id,强制对getStudyContract()的请求失败。然后我得到AggregateException,然后所有对我的客户机的后续调用都会丢失Accept和Accept语言。我不知道我做错了什么。如果有人有建议,请帮忙

aggregateeexception
中的
InnerExceptions
集合中是否存在引发的任何其他异常?不,没有任何其他异常,因为我通过发布到无效url(无Id)强制执行“task cancelled”异常。发布到无效url不应强制取消任务,它应返回错误。导致任务取消的唯一原因是您请求取消(通过
CanellationTokenSource
)或进程关闭或诸如此类的操作。似乎这里还发生了其他事情。我的委托Hanlder确实有一个CancellationToken,但我没有设置任何特定的“受保护的覆盖任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken){var response=base.SendAsync(请求,CancellationToken);返回响应;}然而,丢失头是否合理?我应该对CancellationToken做些什么吗?我根本不想关注这一点,因为我正在强制执行此异常。我的基本意思是,当发生未处理的异常时,头丢失,我正在创建此异常,可能是错误地通过无效请求创建的。结果我已取消的任务或任何其他未处理的异常都是相同的
internal HttpResponseMessage getStudyContract(string id)
    {
        try
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", (string)HttpContext.Current.Session["accessToken"]);
            HttpResponseMessage response = client.GetAsync(restEndpoint + restStudyContractsEndpoint + "/" + id).Result;
            return response;
        }
        catch (AggregateException ex)
        {
            throw new RestHttpClientRequestException(restRequestExceptionMessage, ex.StackTrace);
        }
        catch (Exception ex)
        {
            throw new RestHttpClientRequestException(ex.Message, ex.StackTrace);
        }
    }