.net core API Post异常给出了NativeErrorCode 12175

时间:2017-04-06 20:28:45

标签: c# .net-core dotnet-httpclient

对于下面的代码,它在被调用时会捕获到HttpRequestException / System.Net.Http.WinHttpException

异常说明: NativeErrorCode 12175
消息“发生安全性错误”

  • e {System.Net.Http.HttpRequestException:发送请求时发生错误。 ---&GT; System.Net.Http.WinHttpException:发生安全性错误 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.WinHttpHandler.<StartRequest>d__105.MoveNext() --- End of inner exception stack trace --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() 在System.Net.Http.HttpClient.d__58.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在Controllers.Controller.d__0.MoveNext()

但是在相同的端点,资源,标题和正文上使用Postman,我得到200回。

POST /account/ HTTP/1.1
Host: test-org.com
X-HTTP-Method-Override: GET
Content-Type: application/xml
Cache-Control: no-cache
Postman-Token: ce565d1a-bfb7-0961-ffd7-d279b90e97c5

<?xml version="1.0" encoding="UTF-8"?>
<accountMessage xmlns="http://sdfssd
........
</accountMessage>

当我搜索NativeErrorCode 12175 .NET时,我发现这个: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx

ERROR_WINHTTP_SECURE_FAILURE
12175
One or more errors were found in the Secure Sockets Layer (SSL) certificate sent by the server. To determine what type of error was encountered, check for a WINHTTP_CALLBACK_STATUS_SECURE_FAILURE notification in a status callback function. For more information, see WINHTTP_STATUS_CALLBACK.

破坏的代码:

// GET: api/Accounts
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        try
        {
            using (var client = new HttpClient())
            {
                try
                {
                    client.BaseAddress = new Uri("https://test-org.com/");
                    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "account");
                    request.Content = new StringContent("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<accountMessage xml...</accountMessage>",Encoding.UTF8,"application/xml");

                    request.Headers.Add("X-HTTP-Method-Override", "GET");
                    var response = await client.SendAsync(request);

                    response.EnsureSuccessStatusCode(); 
                    var stringResponse = await response.Content.ReadAsStringAsync();
                    var posts = JsonConvert.DeserializeObject<IEnumerable<Post>>(stringResponse);

                    if (posts == null) return NotFound($"Posts were not found");
                    return Ok(posts);
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"Request exception: {e.Message}");
                }
            }
        }
        catch (Exception)
        {

        }
        return BadRequest();
    }

1 个答案:

答案 0 :(得分:12)

我与服务器/服务的所有者进行了交谈。他们提供全新的服务,该服务目前正在使用自签名证书。在服务器/服务使用可以通过证书颁发机构验证的真实证书之前,我将在我的代码中绕过证书验证:

<sup>