Таким образом, похоже, что несколько человек (например, здесь и здесь) были проблемы с привязкой модели MVC4 для ApiControllers, но ни один из них не решает проблемы проблема, которую я вижу.
Все, что я действительно хотел бы сделать, это изменить поведение привязки массива для списков целых чисел. Итак, скажем, у меня был такой тип запроса:
public class MyRequestModel
{
public List<long> ListOfIntegers { get; set; }
...
}
И такой метод API GET:
public ResultsResponseModel Get(MyRequestModel request)
{
// use request.ListOfIntegers meaningfully
...
return response;
}
Я в основном хочу иметь возможность сказать /api/results/?listOfIntegers=1+2+3+4+5
и иметь это разрешение для свойства List<long>
.
Я попробовал свои обычные трюки с привязкой модели, но, как и в большинстве веб-API в MVC4, он имеет совершенно отдельный путь для привязки модели.
Самое большее, что я получил, это использование атрибута System.Web.Http.ModelBinding.ModelBinder
для MyRequestModel
и создание связывателя модели, который «реализовал» System.Web.Http.ModelBinding.IModelBinder
. Это постоянно приводит к исключению ссылки на объект с трассировкой стека, которая никогда не затрагивает мой код.
Кто-нибудь попал в это? Есть мысли, что попробовать дальше?
ОБНОВЛЕНИЕ: вот трассировка стека, которую я зафиксировал в своем пользовательском ExceptionFilterAttribute
:
Object reference not set to an instance of an object.
at System.Web.Http.ModelBinding.DefaultActionValueBinder.BindParameterValue(HttpActionContext actionContext, HttpParameterBinding parameterBinding)
at System.Web.Http.ModelBinding.DefaultActionValueBinder.<>c__DisplayClass1.BindValuesAsync>b__0(RequestContentReadKind contentReadKind)
at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass38.<ToAsyncVoidTask>b__37()
at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)