【问题标题】:Asp.net Web Api get request headerAsp.net Web Api 获取请求头
【发布时间】:2016-03-12 21:56:09
【问题描述】:

我有一个 Api 项目,其中有 2 个不同的控制器:

一个控制器是一个 System.Web.Mvc 控制器:

公共类 HomeController : 控制器

其中,我定义了如下请求:

var request = System.Web.HttpContext.Current.Request;
                request.Headers.Add("token", "test");

另一个控制器是 Api 控制器:

公共类 CalendarController : ApiController { 私有字符串_accessToken;

    public CalendarController()
    {
        IEnumerable<string> accessTokenValues;

        var request = System.Web.HttpContext.Current.Request;

        var token = request.Headers.GetValues("token");
        //var tokenValues = accessTokenValues as string[] ?? accessTokenValues.ToArray();
        //_accessToken = (tokenValues.Any()) ? tokenValues.First() : "";
    } }

我在请求标头中添加了“令牌”,但无法在 Api 控制器中获取它。请帮我 ! 谢谢!

【问题讨论】:

  • 谁在调用 api 端点?调用此 api 端点的任何人都应该发送标头值。仪式?
  • 请详细说明。我的代码首先在 HomeController 中运行以设置令牌值。然后,我想在 Api Controller 上得到它
  • HTTP 是无状态的!你想通过设置标题来实现什么。你能详细说明你的用例吗?

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


【解决方案1】:

发起调用者负责设置请求标头。因此,在对 HomeController 的第一个请求中添加标头意味着它不会被添加到对 CalendarController 的后续请求中。看看:https://msdn.microsoft.com/en-us/library/bb470252.aspx 了解有关 ASP.NET 请求响应管道的更多详细信息

最终,如何添加到标题取决于您想要实现的目标。

例如,如果您将服务器端的所有信息添加到请求标头中,并且您使用的是 OWIN,则可以添加一个自定义中间件层,该层将拦截传入调用并将您的自定义标头添加为请求进入你的控制器。(http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2012-12-18
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多