我有一个使用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;
}
}
有谁知道如何处理尽可能高的管道消息?甚至可能没有消息处理程序
答案 0 :(得分:0)
如果您查看以下教程......
HTTP Message Handlers in ASP.NET Web API
你会看到......
消息处理程序的调用顺序与它们出现的顺序相同 MessageHandlers 集合。因为它们是嵌套的,所以响应 消息向另一个方向传播。也就是说,最后一个处理程序是 第一个收到回复消息。
您需要确保在ADFS之前注册处理程序。查看您的web api的设置