C# 版本控制更改IEnumerable参数的模型绑定行为

C# 版本控制更改IEnumerable参数的模型绑定行为,c#,asp.net,asp.net-web-api,asp.net-core,owin,C#,Asp.net,Asp.net Web Api,Asp.net Core,Owin,我最近在我的项目中引入了包Microsoft.AspNet.WebApi.Versioning(),以便对我的API进行版本控制 它就像一个符咒,但不幸的是,它有一个奇怪的副作用。它将IEnumerableuri参数的默认参数值从null更改为空的列表。我使用包存储库中的基本示例将其隔离 呼叫返回 ids为null:True如果版本控制未启用(以前的行为) ids为null:False如果启用了版本控制 恐怕它也会改变其他行为。如何保留版本特性,但使用默认模型绑定 控制器 // breaks [

我最近在我的项目中引入了包
Microsoft.AspNet.WebApi.Versioning
(),以便对我的API进行版本控制

它就像一个符咒,但不幸的是,它有一个奇怪的副作用。它将
IEnumerable
uri参数的默认参数值从
null
更改为空的
列表
。我使用包存储库中的基本示例将其隔离

呼叫返回

ids为null:True
如果版本控制未启用(以前的行为)

ids为null:False
如果启用了版本控制

恐怕它也会改变其他行为。如何保留版本特性,但使用默认模型绑定

控制器

// breaks
[Microsoft.Web.Http.ApiVersion("1.0")]
[RoutePrefix( "api/v{version:apiVersion}/helloworld" )]

// working
//[RoutePrefix("api/v1/helloworld")]
public class HelloWorldController : ApiController
{
    [Route]
    public IHttpActionResult Get([FromUri] IEnumerable<Guid> ids)
    {
        return Ok($"ids is null: {ids == null}");
    }
}
复制

git clone https://github.com/smstuebe/webapi-versioning-parameter-binding.git
git checkout working
# if you want to break it
git checkout broken
git clone https://github.com/smstuebe/webapi-versioning-parameter-binding.git
git checkout working
# if you want to break it
git checkout broken