Asp.net web api 当路由模板中有一个参数(例如/route/{id})时,为什么参数绑定的工作方式不同?
我发现ASP.NET Web API中似乎存在不一致的行为。假设我有以下控制器:Asp.net web api 当路由模板中有一个参数(例如/route/{id})时,为什么参数绑定的工作方式不同?,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我发现ASP.NET Web API中似乎存在不一致的行为。假设我有以下控制器: public class FooController: ApiController { [HttpGet, Route("foo")] public IHttpActionResult GetFoo([FromUri]Bar request) { } [HttpGet, Route("foo/{id}")] public IHttpActionResult GetF
public class FooController: ApiController
{
[HttpGet, Route("foo")]
public IHttpActionResult GetFoo([FromUri]Bar request)
{
}
[HttpGet, Route("foo/{id}")]
public IHttpActionResult GetFoo(int id, [FromUri]Bar request)
{
}
}
如果我向/foo发送一个GET请求,并且没有查询字符串参数,那么第一个方法将被执行,其请求参数将为null——这是有意义的。但当我向foo/1发送请求时,情况并非如此。在本例中,我只希望id参数用1填充,但事实证明这两个参数都已初始化
为什么会这样?如果这是出于设计,我可以做些什么来规范该行为,即使两个方法中的请求参数都为null或初始化?您使用的是哪个版本的Web API?你能分享一下你的Microsoft.AspNet.WebApi.Core nuget软件包的版本吗?这里目前有一个已知的问题:,但是这里提到的问题和你观察到的不同…当请求为/foo时,你看到请求被初始化了吗?@KiranChalla我使用的是v2.1 Microsoft.AspNet.WebApi.Core 5.1.2。不,我没有。当我向/foo发送请求时,没有任何querystring,请求为null。这正是您提到的问题中所报告的,我不知道它只影响属性路由。但是,正如我上面所说的,如果我向/foo/1发送请求,情况就不一样了。如果这是一个错误,我可以把这个问题转移到CodePlex,如果你愿意的话。感谢你的检查…看起来你看到的问题可能与CodePlex中的问题有关…如果你想保持一致性,那么你可能可以看看我在CodePlex问题的评论中发布的解决方法…当然,您可能可以将/foo/1的场景添加到上述codeplex问题中…@KiranChalla感谢您的建议。我已经在研究一个与您的解决方案非常相似的解决方案-我很高兴看到我走上了正确的轨道