gpt4 book ai didi

c# - ActionFilterAttribute 添加的 Headers 不会出现在 ApiController 中

转载 作者:太空狗 更新时间:2023-10-30 01:16:38 26 4
gpt4 key购买 nike

我希望能够使用 ActionFilterAttribute 将 header 注入(inject) WebApi Controller 方法上下文:

public class HeaderInjectionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
actionContext.Request.Headers.Add("test", "test");
base.OnActionExecuting(actionContext);
}
}

并在 Controller 中使用它

[HeaderInjectionFilter]
public class MotionTypeController : ApiController
{
public bool Get()
{
// will return false
return HttpContext.Current.Request.Headers.AllKeys.Contains("test");
}
}

正如我在评论中指出的那样,过滤器注入(inject)的 header 不会成为 HttpContext.Current 的一部分。 .当我在 OnActionExecuting 的最后一行设置断点时在属性中,我可以看到它在请求 header 中包含 header 值。

如果我将 Controller 更改为

public class MotionTypeController : ApiController
{
public bool Get()
{
HttpContext.Current.Request.Headers.Add("test", "test");
// will return true
return HttpContext.Current.Request.Headers.AllKeys.Contains("test");
}
}

一切正常所以我猜 actionContextOnActionExecutingHttpContext.Current 不同 Controller 。

如何为调试目的注入(inject) header ?

最佳答案

As I stated out in the comment the header injected by the Filter will not be part of the HttpContext.Current

那是因为您将它添加到了 actionContext.Request.Headers 集合中。因此,请确保您查找的位置与添加它的位置相同:

[HeaderInjectionFilter]
public class MotionTypeController : ApiController
{
public bool Get()
{
return this.Request.Headers.GetValues("test").Any();
}
}

并且忘记 HttpContext.Current。把它想象成不存在的东西。每当有人在 ASP.NET 应用程序中使用 HttpContext.Current 时,小猫就会死去。

关于c# - ActionFilterAttribute 添加的 Headers 不会出现在 ApiController 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com