我发现ASP.NET Core的绑定不一致。
public IactionResult Do(string foo,int bar) // works
public IactionResult DoWithArray(int[] bars) // 415
public IactionResult DoWithDTO([FromQuery] DTO dto) // works
public IactionResult DoWithAttribute([FromQuery] int[] bars) // 415
public IactionResult DoWithAtrributeName([FromQuery(Name = "bars")] int []bars) // works
方法“ Do”按预期方式工作。但是,方法“ DoWithArray”返回415。将数组放置在DTO和DTO中时,它会很好地绑定(即使我未指定Name)。 Mehtod“ DoWithAttribute”不起作用,并且仅当指定了Name时,该数组才能绑定。
我试图找出这种不一致的原因。我没有找到任何解释。也许我做错了,或者我在想错了。我有没有意识到的事情?这是正确的行为吗?有没有一种热方法可以绑定集合而无需使用不带名称的FromQueryAttribute或完全不使用FromQuneryAttribute?
我没有测试如果没有ApiControllerAttribute,行为是否会变得更合理。
编辑:集合查询字符串的格式为/api/foo?bars=5&bars=10
Edit2:在ASP.NET WebApi中,您可以像使用FromUriAttribute
public HttpResponseMessage DoWithArray([FromUri] int[] bars)
无需指定名称即可成功绑定数组