76

Tôi cần tạo một phương thức POST trong WebApi để tôi có thể gửi dữ liệu từ ứng dụng sang phương thức WebApi. Tôi không thể nhận giá trị tiêu đề.

Ở đây tôi đã thêm các giá trị tiêu đề trong ứng dụng:

 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);
        }

Theo phương pháp bài 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();
        }
    }

Phương pháp đúng để nhận giá trị tiêu đề là gì?

Cảm ơn.

|
150

Về phía API Web, chỉ cần sử dụng đối tượng Yêu cầu thay vì tạo httpRequestMessage mới

     var re = Request;
    var headers = re.Headers;

    if (headers.Contains("Custom"))
    {
        string token = headers.GetValues("Custom").First();
    }

    return null;

Đầu ra -

|
16

Giả sử chúng ta có một Trình điều khiển API ProductsContaptor: ApiCont điều khiển

Có một hàm Get trả về một số giá trị và mong đợi một số tiêu đề đầu vào (ví dụ: Tên người dùng & Mật khẩu)

[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);
}

Bây giờ chúng tôi có thể gửi yêu cầu từ trang bằng JQuery:

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

Hy vọng điều này sẽ giúp ai đó ...

|
6

Một cách khác bằng cách sử dụng phương thức TryGetValues.

public string Postsam([FromBody]object jsonData)
{
    IEnumerable<string> headerValues;

    if (Request.Headers.TryGetValues("Custom", out headerValues))
    {
        string token = headerValues.First();
    }
}   
|
5

hãy thử những dòng mã này hoạt động trong trường hợp của tôi:

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

Trong trường hợp ai đó đang sử dụng ASP.NET Core để liên kết mô hình,

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

Có hỗ trợ để truy xuất các giá trị từ tiêu đề bằng thuộc tính [FromHeader]

public string Test([FromHeader]string Host, [FromHeader]string Content-Type )
{
     return $"Host: {Host} Content-Type: {Content-Type}";
}
|
1

Đối với .NET Core:

string Token = Request.Headers["Custom"];

Hoặc là

var re = Request;
var headers = re.Headers;
string token = string.Empty;
StringValues x = default(StringValues);
if (headers.ContainsKey("Custom"))
{
   var m = headers.TryGetValue("Custom", out x);
}
|
0

Bạn cần phải nhận được HTTPRequestMessage từ ActivityContext hiện tại. Sử dụng OperationContext bạn có thể làm như vậy

OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;

HttpRequestMessageProperty requestProperty = messageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;

string customHeaderValue = requestProperty.Headers["Custom"];
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.