でJSONフィールドを削除します。は、私はこのようなモデルUpdateProductCommandを受け入れるコントローラを持っているASP MVC WEBAPIアクションメソッド
JSONリクエストからこのフィールドの値を削除(または切り捨て)するにはどうすればよいですか?
でJSONフィールドを削除します。は、私はこのようなモデルUpdateProductCommandを受け入れるコントローラを持っているASP MVC WEBAPIアクションメソッド
JSONリクエストからこのフィールドの値を削除(または切り捨て)するにはどうすればよいですか?
これは、次のModelBinder
によって達成することができます。
public IHttpActionResult UpdateProduct(([ModelBinder(typeof(FieldRemoverModelBinder), Name = nameof(UpdateProductCommand.AuditUserName))]UpdateProductCommand command)
{
// here command.AuditUserName will always be empty, no matter what's in json
のDTOをするためのものである何が:
using Newtonsoft.Json.Linq;
public class FieldRemoverModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
string content = actionContext.Request.Content.ReadAsStringAsync().Result;
JObject json = JObject.Parse(content);
JToken property = json.GetValue(bindingContext.ModelName, StringComparison.OrdinalIgnoreCase);
property?.Parent.Remove();
bindingContext.Model = json.ToObject(bindingContext.ModelType);
return true;
}
}
はこのようにそれを使用してください。
あなたはちょうどあなたが入力として使用したい/必要なプロパティのみを持つ別のクラス(例えばUpdateProductCommandDto
)を作成することができますし、あなただけのUpdateProductCommand
の新しいインスタンスにマッピングするAutomapperのようなものを使用することができます。
これはリクエストから削除していない(バインドしていない)。とにかく、このメソッドのコードがそれを設定しているので、そのポイントは何ですか? –
@StephenMuecke - jsonではこのフィールドをすべて送信しませんが、APIはインターネットに公開されます。だから誰かが生のクエリでそれをやりたいのではないかと思うかもしれません。 –
私たちが要求からバインドしたいプロパティだけを含むビューモデルを使用しているのはなぜですか? –