Как я могу вызвать привязку пользовательской модели в MVC4?
Так что, похоже, несколько человек (какВот а такжеВот) были проблемы сMVC4 model binding for ApiControllersНо ни один из них, похоже, не решает проблему, которую я вижу.
Все, что я действительно хотел бы сделать, это изменить поведение привязки массива для списков целых чисел. Скажем, у меня был такой тип запроса:
<code>public class MyRequestModel { public List<long> ListOfIntegers { get; set; } ... } </code>
И метод API GET, как это:
<code>public ResultsResponseModel Get(MyRequestModel request) { // use request.ListOfIntegers meaningfully ... return response; } </code>
Я в основном хочу иметь возможность сказать/api/results/?listOfIntegers=1+2+3+4+5
и что решимость кList<long>
имущество.
Я попробовал свои обычные приемы привязки модели, но, как и большинство веб-API вMVC4 it appears to have a totally separate path for model binding.
Самое дальнее, что я получил, - это использованиеSystem.Web.Http.ModelBinding.ModelBinder
атрибут наMyRequestModel
и создание связующего для модели, который "реализован"System.Web.Http.ModelBinding.IModelBinder
, Это последовательно приводит к исключению ссылки на объект со следами стека, которые никогда не затрагивают мой код.
Кто-нибудь ударил это? Есть мысли о том, что попробовать дальше?
UPDATEВот трассировка стека, которую я записал в своем обычаеExceptionFilterAttribute
:
<code>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) </code>