【发布时间】:2016-09-24 21:33:34
【问题描述】:
我有一个使用 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;
}
}
有谁知道如何处理尽可能高的消息?甚至可能没有消息处理程序
【问题讨论】:
-
看看这个关于委托处理程序的教程asp.net/web-api/overview/advanced/http-message-handlers
标签: c# asp.net asp.net-web-api cookies cross-domain