我有一个使用ADFS的WebAPI服务(对这个问题不重要,但它是微软的active directory身份验证服务)。
用户向服务器发送请求,由于未通过身份验证,因此会重定向到ADFS的登录页面。下次他向服务器发送请求时,他将发送一个身份验证cookie,这将允许他跳过ADFS登录页面。
该服务正由另一个域(CORS)访问,但我已经解决了这个问题。GET请求很容易处理。
我的问题是OPTIONS请求,因为我的服务与网站的域不同。OPTIONS请求在每次POST请求之前发送。所有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;
}
}
有人知道我如何处理尽可能高的消息吗?甚至可能没有消息处理程序
如果你看一下下面的教程。。。
ASP中的HTTP消息处理程序。NET Web API
你会看到。。。
消息处理程序的调用顺序与它们在MessageHandlers集合。因为它们是嵌套的,所以响应信息会向另一个方向传播。也就是说,最后一个处理程序是第一个获得响应消息。
您需要确保在ADFS之前注册处理程序。查看您的web api 设置