C# 模型上的FromBody和FromHeader混合未绑定所有值
我想基于主体内容和标题内容填充viewmodel,我尝试使用这两个属性进行修饰,但似乎只有一个属性正在运行并填充值 将FromBody移动到属性会导致填充标头值,而在控制器的param声明中包含FromBody会导致填充主体Id 随后在控制器中运行TryUpdateModelAsync确实会填充这两个对象,但这看起来很难看,而且过于夸张 有人知道如何让它工作吗C# 模型上的FromBody和FromHeader混合未绑定所有值,c#,asp.net-core,model-binding,C#,Asp.net Core,Model Binding,我想基于主体内容和标题内容填充viewmodel,我尝试使用这两个属性进行修饰,但似乎只有一个属性正在运行并填充值 将FromBody移动到属性会导致填充标头值,而在控制器的param声明中包含FromBody会导致填充主体Id 随后在控制器中运行TryUpdateModelAsync确实会填充这两个对象,但这看起来很难看,而且过于夸张 有人知道如何让它工作吗 public IActionResult GetAddress([FromBody]AddressDataViewModel model
public IActionResult GetAddress([FromBody]AddressDataViewModel model)
{
if (!this.ModelState.IsValid)
{
return this.BadRequest(this.ModelState);
}
return this.Ok(this.helper.GetAddress(model.Id));
}
public class AddressDataViewModel : BaseHttpRequestMeta
{
[Required]
public string Id { get; set; }
}
public class BaseHttpRequestMeta
{
[BindRequired]
[FromHeader(Name = "sessionid")]
public string SessionId { get; set; }
}
您可以尝试创建自己的绑定源。还没有测试过这个,但有点像混合绑定源:
public class FromHeaderOrBodyAttribute : Attribute, IBindingSourceMetadata
{
public BindingSource BindingSource => new HeaderOrBodyBindingSource();
}
public class HeaderOrBindingSource : BindingSource
{
public HeaderOrBindingSource() : base("HeaderOrBody", "Header or Body binding source", true, true)
{
}
public override bool CanAcceptDataFrom(BindingSource bindingSource)
{
return bindingSource == BindingSource.Header
|| bindingSource == BindingSource.Body;
}
}
然后在操作中使用属性:
public IActionResult GetAddress([FromHeaderOrBody]AddressDataViewModel model)
{
}
再说一次,我还没有测试过这个,但是我觉得仅仅为了一个注释,代码有点太多了。请回复您的结果。是否找到解决方案?