【问题标题】:C# WebAPI Top Message HandlingC# WebAPI 顶级消息处理
【发布时间】: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;
    }
}

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

【问题讨论】:

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


【解决方案1】:

如果你看看下面的教程...

HTTP Message Handlers in ASP.NET Web API

你会看到...

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

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

【讨论】:

  • 好吧,我如何让它成为第一个处理程序?在 Application_Start 阶段根本没有消息处理程序
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多