だから、とhereのようないくつかの人々は、のMVC4モデルバインディングを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と同様に、モデルバインドのための完全に別個のパスがあるようです。
私はMyRequestModel
にSystem.Web.Http.ModelBinding.ModelBinder
属性を使用して、そしてSystem.Web.Http.ModelBinding.IModelBinder
「実装」というモデルバインダーを作成してもらいました遠いです。これは、コードに決して触れないスタックトレースを持つオブジェクト参照例外を一貫して生成します。
誰でもこれを打つ?次は何をしようか考えていますか?
UPDATE:ここで私は私のカスタムExceptionFilterAttribute
で撮影してきたスタックトレースがあります:あなたがApiControllersを話しているなら、あなたは今、MVCのウェブAPIでバインドをモデル化し、しようとしている
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)
あなたはスタックトレースを提出できますか? – jorgehmv
スタックトレースを追加しました。 –