asp.net – WebApi:将参数映射到标头值
发布时间:2020-05-28 02:31:49 所属栏目:asp.Net 来源:互联网
导读:我做了一些搜索,但似乎没有找到任何东西…… 使用WebApi,我想将输入参数映射到标题值:例如 例如.在控制器中: public User GetUser(int id){ ... return user;} 我希望WebApi将id参数映射到标头值(例如X-Auth:1234)…而不是URL参数. 这支持吗? 我不认为这
|
我做了一些搜索,但似乎没有找到任何东西…… 使用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)
{
...
}
希望有所帮助. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 安装程序 – 在MVC4 RC中缺少单页应用程序模板
- 在ASP.NET MVC中获取原始请求
- asp.net-mvc – 组合数据注释属性
- asp.net-mvc – View()vs. PartialView()
- asp.net中的会话,缓存和配置文件有什么区别
- ASP.NET和C#有什么区别?
- asp.net – 检测是否加载了HttpModule
- 数组 – 如何在vbscript中实现具有可变大小的数组
- asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一
- asp.net-mvc – ASP.NET MVC – ModelState.IsValid是false
