在ASP.Net Web API中委托处理程序返回错误的状态代码

时间:2014-12-05 17:37:21

标签: c# asp.net-web-api

我有一个带有以下委托处理程序的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中。 问题是在证书错误的情况下返回Unauthorized,而不是在客户端返回500内部服务器错误状态。正确的证书没有问题。此外,似乎没有例外,如果我把代码块放在try / catch中。在调试时,代码返回带有未授权状态代码的异步任务,但客户端收到500.事件查看器中没有记录错误。 Web API使用的是.Net 4.5.1。

我有什么遗失的吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

System.Net.Http.Formatting程序集是个问题。签入版本为5.2.2.0,而系统正在寻找5.2.0.0。在web.config中添加了程序集绑定重定向,它解决了这个问题。这个问题只能通过@Fals建议得到小提琴手的回应来揭示。服务器端调试没有帮助。