Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 当路由模板中有一个参数(例如/route/{id})时,为什么参数绑定的工作方式不同?_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

Asp.net web api 当路由模板中有一个参数(例如/route/{id})时,为什么参数绑定的工作方式不同?

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

我发现ASP.NET Web API中似乎存在不一致的行为。假设我有以下控制器:

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感谢您的建议。我已经在研究一个与您的解决方案非常相似的解决方案-我很高兴看到我走上了正确的轨道