【问题标题】:I need to pass a parameter from request header to the API controller action method. How can I?我需要将请求标头中的参数传递给 API 控制器操作方法。我怎样才能?
【发布时间】:2014-05-05 07:49:02
【问题描述】:

我正在使用 WEB API 2.0 进行 REST 服务开发,我需要将参数从请求标头传递到 API 控制器操作方法。我怎样才能?

默认情况下,API 控制器从请求正文中读取参数。 如何让它从请求头中读取参数?

[HttpPost]
[Route("abc")]
public IHttpActionResult abcMethod(string s)
{
   //some code
}

我希望上面的 abcMethod 从请求头中读取它的参数。

请建议。

【问题讨论】:

  • 恕我直言,请求标头不是供应用程序使用的。 Querystring 参数单独被应用程序解释为参数。如果您能提供用例,将有助于进一步讨论。
  • 哦.. 在这种情况下,使用 HttpPost 方法读取一些敏感数据的最佳方法是什么?
  • 使用 SSL over HTTP 或使用加密数据,我们可以发送敏感数据。由于 HTTPS 对整个负载进行加密,因此请求中的任何内容都无法被窃听
  • 让我实际告诉你这个场景。我正在为要使用的移动应用程序编写 REST 服务。 UI 团队正在向我的后期服务请求发送 GUID 和其他参数。我们希望 GUID 与请求正文的其他参数分开。除了请求正文和uri之外,还有其他方法吗?请善待。我是一只新蜜蜂。如果我的 qn 不清楚,请告诉我。
  • AFAIK,即使是来自 aAuth 服务器的访问令牌也是在请求正文中发送的,没有其他特殊方式。

标签: c# asp.net asp.net-mvc-4 asp.net-web-api2


【解决方案1】:

这个怎么样...

IEnumerable<string> headerValues = request.Headers.GetValues("MyCustomID");
var id = headerValues.FirstOrDefault();

【讨论】:

  • IEnumerable 不包含 FirstOrDefault 的定义,也未找到扩展方法。我需要引用任何程序集吗??
  • 添加using System.Linq;
  • 是的。这是工作。非常感谢!!但是 saravanan 在他上面的评论中表示,标题不应该被应用程序使用。无论如何,我会将此传达给我的共同开发人员并决定!再次感谢!!
【解决方案2】:

我还是 Web API 2 的新手,但我通常会这样做

string variale = this.Request.Headers.GetValues("HeaderParameter").First();

FirstOrDefault、Single、SingleOrDefault() 或类似的任何一个都可以。

另外,Lambda 也可以:

string variable = this.Request.Headers.First(header => header.Key == "Parameter").Value.FirstOrDefault();

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多