我有一个使用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上正常运行。