我有修改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并确保一切,一旦我知道我完成了对内容的所有更改饼干。
答案 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());