我正在创建具有以下网址的API
/api/abc/?q=1&a=2&b=3&b=4
^^^^^^^
Input.cs (在ModelBinding中使用的类)
...
public string A { get; set; }
public string B { get; set; }
public string Q { get; set; }
...
我正在使用.NET的默认ModelBinding,但问题是当我在url上方传递时,以下值分配给了该属性
obj.A = "2" // here obj is object of Input class
obj.B = "3"
obj.Q = "1"
我期望obj.B = "3,4"
(在执行Request.QueryString [“ b”]时,其输出为“ 3,4”),但它仅绑定第一个值。
为什么会这样?(我不知道默认ModelBinding的内部结构,但是我猜想它是使用Request.QueryString进行绑定的。)
谁能告诉我为什么会这样,如何获得obj.B值“ 3,4”?
我为B获得“ 3,4”的方法是
使用自定义Model Binder,我已经完成了
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
object model = base.BindModel(controllerContext, bindingContext);
var obj = model as Input;
obj.B = Request.QueryString["b"];
}
答案 0 :(得分:2)
您正在为B
发送多个值,这意味着您需要将B
设为集合。请注意,DefaultModelBinder
会绑定第一个匹配的名称/值对,如果您的属性不是IEnumerable
,则会忽略其余的对。
将属性更改为
public IEnumerable<string> B { get; set; }
,它将包含两个值(如果您随后确实想要3,4
,则可以在数组上使用String.Join
)。