我有一个带有以下委托处理程序的ASP.Net Web API:
public class AuthenticationHandler : DelegatingHandler
{
public ILogger Logger { get; set; }
public AuthenticationHandler(ILogger logger)
{
this.Logger = logger;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
X509Certificate2 certificate = request.GetClientCertificate();
if (certificate == null)
{
Logger.LogWarning("No certificate found on the request.");
return Task<HttpResponseMessage>.Factory.StartNew(
() => request.CreateResponse(HttpStatusCode.Unauthorized));
}
if (!IsValidCertificate(certificate))
{
Logger.LogWarning("Certificate found on the request is not valid. Thumbprint : " + certificate.Thumbprint);
return Task<HttpResponseMessage>.Factory.StartNew(
() => request.CreateResponse(HttpStatusCode.Unauthorized));
}
}
}
该处理程序已在Global.asax.cs中注册。该站点托管在IIS 8.5中。问题不是在证书错误的情况下返回未授权,而是在客户端返回状态500内部服务器错误。正确的证书没有问题。另外,如果我将代码块放入try / catch中,似乎也没有例外。在调试时,该代码返回带有未授权状态代码的异步任务,但是客户端收到500。事件查看器中未记录任何错误。Web API使用的是.Net 4.5.1。
我有什么想念的吗?任何帮助表示赞赏。
System.Net.Http.Formatting程序集是问题。系统正在寻找5.2.0.0时,签入版本为5.2.2.0。在web.config中添加了程序集绑定重定向,从而解决了该问题。只有通过@Fals的建议,让提琴手做出回应才能发现该问题。服务器端调试无济于事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句