为什么使用HttpClient的PostAsync()请求会抛出UnauthorizedAccessException?

时间:2015-07-09 12:18:25

标签: c# windows-runtime windows-8.1 dotnet-httpclient windows-10

我正在使用HttpClient执行基本的POST请求。每次发出请求时,都会抛出UnauthorizedAccessException消息

  

无法访问MemoryStream的内部缓冲区。

我尝试使用没有任何参数的GET请求而且工作正常,这让我相信它可能是我生成要发送的参数的过程。此外,当从try / catch块中调用PostAsync()方法时,catch块永远不会捕获该异常,而是继续请求。我之前从未遇到像这样的POST请求的问题。

using (var client = new HttpClient()) 
{
    client.BaseAddress = new Uri("https://theurl.com/");

    List<KeyValuePair<String, String>> parameters = claim.RequestParameters();
    var content = new FormUrlEncodedContent(parameters);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
    HttpResponseMessage response = new HttpResponseMessage();
    try
    {
        response = await client.PostAsync(url, content); // Exception generated here
    }
    catch (System.UnauthorizedAccessException e)
    {
        // This catch statement is never entered
        Debug.WriteLine(e.Message);
    }

    if (response.IsSuccessStatusCode) // ...
}

我正在为Windows 10开发(我使用的是Windows 10 build 10162),x86和x64版本都会抛出异常。

更新1:

我从documentation注意到MemoryStream(byte[])构造函数会抛出UnauthorizedAccessException

  

此构造函数不公开基础流。 GetBuffer抛出UnauthorizedAccessException。

应该使用

MemoryStream(byte[], Int32, Int32, Boolean, Boolean)

PostAsync()方法是否可能在内部调用MemoryStream(byte[])构造函数而不是MemoryStream(byte[], Int32, Int32, Boolean, Boolean)构造函数,这是导致问题的原因吗?

更新2:

我还尝试使用this SO post中的最小示例,其中代码的海报知道它可以在他的机器上运行。它在我的工作。我仍然有如上所述抛出的异常。

0 个答案:

没有答案