【发布时间】:2013-12-19 18:44:25
【问题描述】:
我遇到了以下问题:
我有一个带有引用类型作为参数的 asp.net mvc 5 控制器:
[Route("")]
[HttpGet]
public ActionResult GetFeeds(Location location)
{
if (location == null)
{
// init location or smth
}
// Do smth with location
return new EmptyResult();
}
您会注意到我正在使用 AttributeRouting。没有其他与此操作名称相同的方法。
但是 - 这是我的位置类:
public class Location : ILocation
{
public DbGeography Coordinates { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
这里没有什么特别的(接口定义了所有这些属性)。
如果我正在访问控制器操作(实际上是使用 powershell)并传递如下内容:
http://localhost:2000/Feed?latitude=23.1&longitude=37
一切正常,但如果我正在使用
http://localhost:2000/Feed
位置参数不为空(它是具有默认值的新位置),这是我想要的行为:(。
有人知道为什么会这样吗?
提前致谢
【问题讨论】:
-
活页夹按设计工作 - 它正在实例化一个
Location对象并使用默认值填充其值,除非您提供覆盖值(您不在第二个示例中)。它不会仅仅因为您的路由没有提供任何值而创建您的Location对象的空实例。 -
@ChristopherKellner - 由于“模型绑定器的工作方式”,它似乎不可能。请查看我的答案中的链接以获得更多解释。
标签: c# asp.net-mvc controller