2017-09-14 29 views
0

本文のコンテンツとヘッダーの両方のコンテンツに基づいてビューモデルを作成したいと思いますが、どちらの属性でもデコレートしようとしましたが、値。FromBodyとFromHeaderは両方ともモデルで両方の値を結合していません

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

独自のバインディングソースを作成することができます。これをテストしていませんが、ハイブリッドバインディングソースのようなもの:

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

再びが、これをテストしていませんが、私はコードが思いましたコメントのためだけに少しすぎます。あなたの結果を返信してください。

関連する問題