C#WebAPI热门消息处理

时间:2016-05-26 18:17:46

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

我有一个使用ADFS的WebAPI服务(对问题不重要,但它是微软的活动目录身份验证服务)。

用户向服务器发送请求,因为未经过身份验证,他将被重定向到ADFS的登录页面。下次他向服务器发送请求时,他将发送一个身份验证cookie,允许他跳过ADFS登录页面。

该服务正由另一个域(CORS)访问,但我已经修复了该问题。 GET请求很容易处理。

我的问题在于OPTIONS请求,因为我的服务与网站的域名不同。在每个POST请求之前发送OPTIONS请求。所有OPTIONS请求都不包含cookie,因此请求被重定向到ADFS登录页面。

我想创建一个消息处理程序,它甚至会在ADFS之前执行,就像一个消息处理程序,它将是第一个运行消息的代码,所以我可以检查请求的方法是否是OPTIONS(其中)我只会回复一个回复)

我尝试使用我在消息处理中找到的示例,但它执行得太晚,ADFS的消息处理程序高于它

public class MessageHandler2 : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // Create the response.
        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent("Hello!")
        };

        // Note: TaskCompletionSource creates a task that does not contain a delegate.
        var tsc = new TaskCompletionSource<HttpResponseMessage>();
        tsc.SetResult(response);   // Also sets the task state to "RanToCompletion"
        return tsc.Task;
    }
}

有谁知道如何处理尽可能高的管道消息?甚至可能没有消息处理程序

1 个答案:

答案 0 :(得分:0)

如果您查看以下教程......

HTTP Message Handlers in ASP.NET Web API

你会看到......

  

消息处理程序的调用顺序与它们出现的顺序相同    MessageHandlers 集合。因为它们是嵌套的,所以响应   消息向另一个方向传播。也就是说,最后一个处理程序是   第一个收到回复消息。

您需要确保在ADFS之前注册处理程序。查看您的web api的设置