3

I Web API özel model bağlayıcı oluşturmak için doğru ad olan `Sytem.Web.Http.ModelBinding' ad aşağıdaki yöntemi kullanan WebAPI özel bir modeli cilt sahip Bu özel model bağlayıcısını kullanmak istediğim bir denetleyicide HTTP POST var. Gönderilen nesne yaklaşık 100 alan içeriyor. 2 tane değiştirmek istiyorum. İhtiyacım olan şey, varsayılan modelin bağlanmasının gerçekleşmesi ve ardından bu 2 alan için o nesneyi birleştirilen nesneyi manipüle etmesidir, böylece denetleyici nesneyi aldığında, bozulmamış olur.WebAPI'deki özel bağlayıcıdan Varsayılan Model Ciltleme nasıl aranır?</p> <pre><code>public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { } </code></pre> <p>:

Sorun şu ki, yukarıdaki model bağlama yönteminden varsayılan bağlayıcıyı kullanarak nesneyi bağlama modelini oluşturamıyorum.

base.BindModel(controllerContext, bindingContext);

Aynı yaklaşım yok WebAPI içinde değil eser: MVC aşağıdaki vardı. Belki bu yanlış hakkında gidiyorum ve ne istediğimi gerçekleştirmek için başka bir yol var, bu yüzden özel bir model bağlayıcı doğru bir yaklaşım değilse lütfen öneririz. Yapmayı engellemeye çalışıyorum, denetleyicinin içerdiği nesneyi manipüle etmek zorunda. teknik olarak ürününü modele bağladıktan sonra yapabilirim, ancak kontrol cihazında daha önce bunu yapmaya çalışıyorum, böylece kontrol cihazının bu 2 alanın özel manipülasyonu konusunda endişelenmesine gerek yok.

Özel model binderimde bindingContext numaralı modele karşı varsayılan model bağlamayı nasıl başlatabilirim, böylece tam olarak doldurulmuş bir nesneyim var, o zaman geri dönmeden önce ihtiyacım olan son 2 alanı manipüle edebilirim/masaj yapabilirim?

cevap

0

WebApi'de 'varsayılan' model bağlayıcı, kayıtlı tüm model bağlayıcılarını saran CompositeModelBinder'dur. Bu işlevselliği yeniden kullanmak isterseniz, aşağıdaki gibi bir şey yapabilirsiniz:

public class MyModelBinder : IModelBinder 
{ 
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) 
    { 
     if (bindingContext.ModelType != typeof(MyModel)) return false; 

     //this is the default webapi model binder provider 
     var provider = new CompositeModelBinderProvider(actionContext.ControllerContext.Configuration.Services.GetModelBinderProviders()); 
     //the default webapi model binder 
     var binder = provider.GetBinder(actionContext.ControllerContext.Configuration, typeof(MyModel)); 

     //let the default binder do it's thing 
     var result = binder.BindModel(actionContext, bindingContext); 
     if (result == false) return false; 

     //TODO: continue with your own binding logic.... 
    } 
} 
İlgili konular