У меня есть входящие запросы (от Facebook для обработки кредитов) на конкретное действие, которое будет иметь разное содержимое, поэтому у меня есть разные классы моделей для обработки этого.
Это мое действие:
public ActionResult Index([ModelBinder(typeof(FacebookCreditModelBinder))] IFacebookRequest facebookRequest)
{
if (facebookRequest is FacebookPaymentsGetItemsRequest)
{
// do whatever
}
}
А это моя модель переплета.
public class FacebookCreditModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var binder = new DefaultModelBinder();
// how to change the model here in the bindingContext?
return binder.BindModel(controllerContext, bindingContext);
}
}
Я хочу создать, например, объект FacebookPaymentsGetItemsRequest
, если входящий var "method" - это "payment_get_items", и FacebookPaymentsStatusUpdateRequest
, если метод - "payment_status_update", и я не знаю, как изменить тип модели в обязательном контексте.
Можно ли изменить тип модели в пользовательском связывателе модели?
Другой подход: я также попробовал его с BindModel, и я могу вернуть правильный объект, но все свойства имеют значение null, поскольку он не заполняется связывателем модели по умолчанию:
public override object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
NameValueCollection form = controllerContext.HttpContext.Request.Form;
if (form.Get("method") == "payments_get_items")
{
return new FacebookPaymentsGetItemsRequest();
}
...