如何在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"];