在ASP.NET的的WebAPI,我怎么能保证复杂的操作参数总是被实例化?即使没有请求参数(在QueryString或POST主体中)。的Web API参数绑定回报情况,即使没有请求参数
例如,鉴于这一诱敌动作定义:
public IHttpActionResult GetBlahBlah(GetBlahBlahInput input) { .. }
我想input
永远是GetBlahBlahInput
实例化的实例。默认行为是如果在请求的任何地方存在的请求参数,然后input
不为空(即使没有请求参数都绑定到GetBlahBlahInput
)。但是,如果没有参数发送,然后GetBlahBlahInput
是null
。我不想null
,我想用参数的构造函数创建一个实例。
基本上,我想实现这个:
http://dotnet.dzone.com/articles/interesting-json-model-binding
在土地的WebAPI(所以没有DefaultModelBinder
继承),我想它通用的,所以它可以处理任何输入类型。
我使用的WebAPI默认JsonMediaFormatter支持。
有什么想法?我很确定它可以完成,我可能会错过某个简单的配置步骤。
你就不能简单的做一个 如果(输入== null)input = new GetBlahBlahInput();在方法的第一行?很简单,但也许我失去了一些东西 – PeterFromCologne
不为我所需要的 - 我正在写将分配值输入模特属性的ActionFilterAttribute。所以这是Action实际触发之前(我重写了ActionExecuting())。如果我可以确定ActionFilterAttribute中的输入类型,我可以在那里处理它,但它感觉不对。正确的是ModelBinder总是返回一个实例化的对象。 – kdawg
我明白你想要做什么。据我所知,WebAPI对原始类型使用ModelBinder,对复杂类型使用Formatter。我担心你最终会增加很多复杂性,试图强制某种没有打算的行为。我宁愿使用标准方式,并接受输入可能为空,如果它没有提供。对不起,我无能为力。 – PeterFromCologne