如何在WebApi中添加和获取Header值

我需要在WebApi中创build一个POST方法,所以我可以从应用程序发送数据到WebApi方法。 我无法获得标题值。

在这里,我在应用程序中添加了标题值:

using (var client = new WebClient()) { // Set the header so it knows we are sending JSON. client.Headers[HttpRequestHeader.ContentType] = "application/json"; client.Headers.Add("Custom", "sample"); // Make the request var response = client.UploadString(url, jsonObj); } 

遵循WebApi发布方法:

  public string Postsam([FromBody]object jsonData) { HttpRequestMessage re = new HttpRequestMessage(); var headers = re.Headers; if (headers.Contains("Custom")) { string token = headers.GetValues("Custom").First(); } } 

什么是获取标题值的正确方法?

谢谢。

在Web API方面,只需使用Request对象而不是创build新的HttpRequestMessage

  var re = Request; var headers = re.Headers; if (headers.Contains("Custom")) { string token = headers.GetValues("Custom").First(); } return null; 

输出 –

在这里输入图像说明

假设我们有一个API Controller ProductsController:ApiController

有一个Get函数返回一些值,并期望一些input标题(例如用户名和密码)

 [HttpGet] public IHttpActionResult GetProduct(int id) { System.Net.Http.Headers.HttpRequestHeaders headers = this.Request.Headers; string token = string.Empty; string pwd = string.Empty; if (headers.Contains("username")) { token = headers.GetValues("username").First(); } if (headers.Contains("password")) { pwd = headers.GetValues("password").First(); } //code to authenticate and return some thing if (!Authenticated(token, pwd) return Unauthorized(); var product = products.FirstOrDefault((p) => p.Id == id); if (product == null) { return NotFound(); } return Ok(product); } 

现在我们可以使用JQuery从页面发送请求:

 $.ajax({ url: 'api/products/10', type: 'GET', headers: { 'username': 'test','password':'123' }, success: function (data) { alert(data); }, failure: function (result) { alert('Error: ' + result); } }); 

希望这可以帮助别人…

另一种使用TryGetValues方法的方法。

 public string Postsam([FromBody]object jsonData) { IEnumerable<string> headerValues; if (Request.Headers.TryGetValues("Custom", out headerValues)) { string token = headerValues.First(); } } 

尝试这些代码在我的情况下工作:

IEnumerable<string> values = new List<string>(); this.Request.Headers.TryGetValues("Authorization", out values);

您需要从当前的OperationContext获取HttpRequestMessage。 使用OperationContext你可以这样做

 OperationContext context = OperationContext.Current; MessageProperties messageProperties = context.IncomingMessageProperties; HttpRequestMessageProperty requestProperty = messageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty; string customHeaderValue = requestProperty.Headers["Custom"];