У меня есть служебный вызов, который получает отфильтрованный набор исторических записей из нашей базы данных.Передача сложного объекта в MVC api равна нулю
У меня возникли проблемы с подключением моего фильтра к моему основному вызову mvc.
[AcceptVerbs("POST")]
public History History(HistoryFilters filters){......}
config.Routes.MapHttpRoute(
name: "DefaultActionRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
amplify.request.define('post', 'ajax', {
url: '/api/{controller}/{action}',
dataType: 'json',
type: 'POST',
cache: cache
});
//History Filter js
{
DateRange: { Start: ..., End: ...},
BetStatus: "unresolved",
TransactionTypes: "bets"
}
Каждый раз, когда я устанавливаю фильтры вызовов, заполняются нулевыми значениями. Структура фильтра JS соответствует структуре моего класса HistoryFilters в C#. Если я JSON.stringify мои фильтры и изменю свой вызов Api на строку, тогда я получаю это, но было бы неплохо, если бы оно могло преобразовать его для меня.
Может ли кто-нибудь сказать мне, что мне не хватает?
Редактировать
var amp = function(id, data) {
return $.Deferred(function(dfd) {
amplify.request({
resourceId: id,
data: data,
success: dfd.resolve,
error: dfd.reject
});
}).promise();
};
History: function (filters) {
return amp('post', { controller: 'user', action: 'history', '':filters});
}
public class HistoryFilters
{
public DateFilter DateRange { get; set; }
public string BetStatus { get; set; }
public string TransactionTypes { get; set; }
}
public class DateFilter
{
public string Start { get; set; }
public string End { get; set; }
}
Предоставьте определение «HistoryFilters» и код «amplify.request()». вероятное решение 1. добавьте параметр «contentType:« application/json »в« amplify.request.define ». 2. Отправьте строковые данные «JSON.stringify (historyFilters)» в параметр данных. – shakib