在EndRequest中进行的Cookie更改不会在Response中发送

时间:2015-01-22 15:15:11

标签: asp.net-web-api asp.net-web-api2

我有修改EndRequest方法中的cookie的逻辑,这在WebForms和MVC 1 中完美有效。

但我刚刚发现它在WebApi中不起作用,即使看起来应该如此。

当我调用WebApi方法MyMethod时,如果方法设置了cookie,我会在响应中看到它。但即使EndRequest之后MyMethod 触发设置所需的Cookie,更新后的Cookie 也不会获取发送请求。您似乎无法修改EndRequest中的响应Cookie,但我无法弄清楚原因,以及如何处理它。

任何人都可以告诉我这里发生了什么,以及如何处理它以便我可以运行我需要的逻辑而无需在每个Web方法中明确地调用它?如果我需要修改响应,在WebApi中捕获EndRequest的意图的正确方法是什么?


[1]它与问题没有直接关系,但原因是我可以通过散列cookie值并在cookie中添加hash密钥来保护cookie免遭篡改。我调用逻辑来保护来自EndRequest的cookie,以便在我的应用程序代码中,我可以做任何我需要的cookie并确保一切,一旦我知道我完成了对内容的所有更改饼干。

1 个答案:

答案 0 :(得分:1)

EndRequest是要执行的管道中的最后一个事件。在响应发送后调用它。您无法使用它来操纵响应。它最常见的用途是记录和事务处理。

您应该考虑实施HttpMessageHandler

public class MyHttpMessageHandler : DelegatingHandler
{         
    protected async override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        // do something with request ...
        // ...

        // process request
        var response =  await base.SendAsync(request, cancellationToken);

        // do something with response
        // ...

        return response;
    }
}

然后你需要注册

GlobalConfiguration.Configuration
                   .MessageHandlers
                   .Add(new HttpMessageHandler());