2016-02-19 3 views
0

Мне нужно связать модель с запросом и преобразовать в мой пользовательский объект, мои данные запроса - json, а метод - сообщение.webapi 2 bind model от json

это мой метод в Web API:

public IHttpActionResult Edit([ModelBinder(typeof(KModelBinder))] object data) 

моя проблема: я не могу получить доступ к JSON из ValueProvider в ModelBinder.

public class KModelBinder : IModelBinder { 
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { 
     var valueProvider = bindingContext.ValueProvider; 
     var valProviderResult = valueProvider.GetValue("id"); 
     // .... 
    } 
} 

пожалуйста, помогите мне

+0

Если я не использую json, modelbinder обнаруживает данные, но когда запрос json, modelbinder не может обнаружить данные :( – Moein

+0

Вы пробовали вот так: 'public IHttpActionResult Edit (данные MyModelClass)'? Он должен работать из коробки. –

+0

нет, потому что этот метод используется для нескольких моделей, и я обнаруживаю модель в привязке модели. – Moein

ответ

0

Вы можете попробовать базовый класс контроллера, как этот

public class BaseController<T>: ApiController 
{ 

    //here you can add whatever dependency injection you may use 
    public BaseController(DbContext context) 
    { 
     _context = context; 
    } 

    [HttpPost] 
    public IHttpActionResult Add(T data) 
    { 
     return Ok(_context.Add(data)); 
    } 

    [HttpPut] 
    public IHttpActionResult Edit(T data) 
    { 
     _context.Modify(data); //here depends on your ORM or data access layer 
     return Ok(data); 
    } 

    /*other methods you think are necessary in this base controller*/ 
} 

После этого вы можете определить свои контроллеры, как этот

public class UserController: BaseController<User> 
{ 
    //here you can override the base controller methods 
} 

я использую несколько подобным подходом в моем текущем проекте и прекрасно работает.

Проверьте это и посмотрите, работает ли это для вашего проекта.