并发请求时,ClientCertificate为空

时间:2018-08-22 18:34:03

标签: c# asp.net ssl https

我有一个使用SSL相互身份验证的应用程序,我注意到一个问题,其中并行REST请求导致Request.GetClientCertificate的响应为空。

我创建了一个空的ASP.NET Web应用程序以隔离其他因素,并获得了相同的结果。这些是涉及的文件

Index.html

<script src="~/Scripts/testing.js"></script>
<div class="row">
    <button onclick="x()">Test</button>
</div>


testing.js

function x() {
    // Making two simultaneous requests 
    $.ajax({
        url: "api/values"
    }).then(function (data) {
        console.log(data);
    });

    $.ajax({
        url: "api/values"
    }).then(function (data) {
        console.log(data);
    });
}


ValuesController.cs

using System.Net.Http;
using System.Web.Http;

namespace WebTemp.Controllers {
    public class ValuesController : ApiController {
        // GET api/values
        public string Get() {
            var cert = Request.GetClientCertificate(); // Here I get null in one of the requests

            return cert == null ? "null" : cert.SubjectName.Name;
        }
    }
}

当我单击html上的按钮,同时调用两个ajax时,一次调用得到null,而另一次调用获得正确的证书值。 如果仅在另一个返回后才调用一个ajax,则不会发生此问题。

我还注意到该错误在Chrome上发生,但代码在Edge上正常运行。

0 个答案:

没有答案