asp.net – WebApi:将参数映射到标头值

前端之家收集整理的这篇文章主要介绍了asp.net – WebApi:将参数映射到标头值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我做了一些搜索,但似乎没有找到任何东西……

使用WebApi,我想将输入参数映射到标题值:例如

例如.在控制器中:

public User GetUser(int id){
   ...
   return user;
}

我希望WebApi将id参数映射到标头值(例如X-Auth:1234)…而不是URL参数.

支持吗?

解决方法

我不认为这是开箱即用的,例如[FromBody]属性.
您似乎应该能够使用模型绑定器来实现此功能,如 here所述.在模型绑定器中,您可以访问请求及其标头,因此您应该能够读取标头并将其值设置为bindingContext.型号属性.

编辑:进一步阅读文章,似乎自定义HttpParameterBinding和ParameterBindingAttribute是一个更合适的解决方案,或者至少我会这样做.您可以实现一个通用的[FromHeader]属性来完成这项工作.我也在解决同样的问题,所以一旦我有了解决方案,我就会发布我的解决方案.

编辑2:这是我的实现:

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")
    {
    }
}

然后你可以像这样使用它:

[HttpGet]
public IHttpActionResult GetItem([MyHeader] string headerValue)
{
    ...
}

希望有所帮助.

猜你在找的asp.Net相关文章