我想基于Body内容和Header内容填充视图模型,我尝试使用这两个属性进行装饰,但只有一个或另一个似乎正在运行并填充值。
将FromBody移动到属性会导致填充标题值,控制器上的param声明中的FromBody会导致填充正文ID。
随后在控制器中运行TryUpdateModelAsync确实填充了两者,但这看起来很难看并且在顶部。
任何人都有任何想法如何让这个工作?
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; }
}
答案 0 :(得分:0)
您可以尝试制作自己的绑定源。没有测试过这个,但是像混合绑定源这样:
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)
{
}
再次,没有对此进行测试,但我认为代码对于评论来说有点太多了。请回复您的结果。