在ASP.NET Core 2.2中,将[FromHeader]
属性与自定义模型绑定一起使用可以通过以下步骤实现:
假设我们有一个自定义模型RequestHeadersModel
,我们希望从请求头部绑定一些值到这个模型。
public class RequestHeadersModel
{
public string CustomHeader { get; set; }
public int CustomIntHeader { get; set; }
}
在控制器中,我们可以这样使用:
[ApiController]
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
[HttpGet]
public IActionResult Get([FromHeader] RequestHeadersModel headers)
{
if (ModelState.IsValid)
{
return Ok(new { message = "Headers bound successfully", headers });
}
else
{
return BadRequest(ModelState);
}
}
}
原因:可能是由于请求头部缺少必要的字段,或者字段类型不匹配。 解决方法:
[ModelBinder]
自定义绑定逻辑,或者在模型属性上使用[BindProperty]
和[FromBody]
等属性来指定数据来源。原因:当请求头部的值不能正确转换为模型属性的类型时会发生。 解决方法:
[TypeConverter]
指定自定义转换器。如果需要更复杂的绑定逻辑,可以创建自定义模型绑定器:
public class RequestHeadersModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
throw new ArgumentNullException(nameof(bindingContext));
var model = new RequestHeadersModel
{
CustomHeader = bindingContext.HttpContext.Request.Headers["Custom-Header"].ToString(),
CustomIntHeader = int.Parse(bindingContext.HttpContext.Request.Headers["Custom-Int-Header"])
};
bindingContext.Model = model;
return Task.CompletedTask;
}
}
然后在模型上使用这个绑定器:
[ModelBinder(BinderType = typeof(RequestHeadersModelBinder))]
public class RequestHeadersModel
{
// ...
}
通过这种方式,可以完全控制模型如何从请求头部绑定数据。
以上就是在ASP.NET Core 2.2中将[FromHeader]
属性与自定义模型绑定一起使用的方法和相关概念。
领取专属 10元无门槛券
手把手带您无忧上云