Tôi không nghĩ rằng điều này được hỗ trợ ra khỏi hộp, ví dụ như với thuộc tính [FromBody]. Có vẻ như bạn sẽ có thể đạt được chức năng này bằng cách sử dụng Trình bao Model, như được mô tả here. Trong trình kết nối mô hình, bạn có quyền truy cập vào yêu cầu và các tiêu đề của nó, vì vậy bạn có thể đọc tiêu đề và đặt giá trị của nó thành thuộc tính bindingContext.Model.
Chỉnh sửa: Đọc thêm bài viết, có vẻ như một tùy chỉnh HttpParameterBinding và ParameterBindingAttribute là một giải pháp thích hợp hơn, hoặc ít nhất tôi sẽ đi theo cách này. Bạn có thể thực hiện một thuộc tính [FromHeader] chung, thực hiện công việc. Tôi cũng chiến đấu cùng một vấn đề, vì vậy tôi sẽ đăng giải pháp của mình một khi tôi có nó.
Chỉnh sửa 2: Đây là thực hiện của tôi:
public class FromHeaderBinding : HttpParameterBinding
{
private string name;
public FromHeaderBinding(HttpParameterDescriptor parameter, string headerName)
: base(parameter)
{
if (string.IsNullOrEmpty(headerName))
{
throw new ArgumentNullException("headerName");
}
this.name = headerName;
}
public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
{
IEnumerable<string> values;
if (actionContext.Request.Headers.TryGetValues(this.name, out values))
{
actionContext.ActionArguments[this.Descriptor.ParameterName] = values.FirstOrDefault();
}
var taskSource = new TaskCompletionSource<object>();
taskSource.SetResult(null);
return taskSource.Task;
}
}
public abstract class FromHeaderAttribute : ParameterBindingAttribute
{
private string name;
public FromHeaderAttribute(string headerName)
{
this.name = headerName;
}
public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter)
{
return new FromHeaderBinding(parameter, this.name);
}
}
public class MyHeaderAttribute : FromHeaderAttribute
{
public MyHeaderAttribute()
: base("MyHeaderName")
{
}
}
Sau đó, bạn có thể sử dụng nó như thế này:
[HttpGet]
public IHttpActionResult GetItem([MyHeader] string headerValue)
{
...
}
Hy vọng rằng sẽ giúp.
Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn. –
[WordHeader ("MyHeader")] có hoạt động với Mã của bạn không? –