所以似乎有几个人(比如这里和这里)对 ApiControllers 的MVC4 模型绑定有问题,但他们似乎都没有完全解决我看到的问题。
我真正想做的就是更改整数列表的数组绑定行为。所以说我有一个这样的请求类型:
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>
财产有这样的决心。
我已经尝试过我常用的模型绑定技巧,但与MVC4 中的大多数 Web API 一样,它似乎有一个完全独立的模型绑定路径。
我得到的最远的是使用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)