Asp.net web api webapi操作重载
以下是我的行动Asp.net web api webapi操作重载,asp.net-web-api,asp.net-routing,Asp.net Web Api,Asp.net Routing,以下是我的行动 public AddressModel[] Get() { return addresses.ToArray(); } public AddressModel Get([FromUri]GetAddressModelById model) { return Addresses.FirstOrDefault(x => x.Id == model.Id); } ... public class GetAddressModelById { public
public AddressModel[] Get()
{
return addresses.ToArray();
}
public AddressModel Get([FromUri]GetAddressModelById model)
{
return Addresses.FirstOrDefault(x => x.Id == model.Id);
}
...
public class GetAddressModelById
{
public Guid Id { get; set; }
}
URL如下所示
domain:port/api/controller
domain:port/api/controller/[guid]
并且路由是默认路由。
当我运行此命令时,发现异常
多个操作与请求匹配。我缺少什么才能让它工作?尝试域:port/api/controller/model=[guid]
如果你能做到以下几点,那也很好:
公共地址模型获取([FromUri]Guid模型)
{
...
}出现此错误的原因是,如果您请求域:port/api/controller,我们无法决定是将其分派到Get()
还是Get([FromUri]GetAddressModelById model)
,模型设置为null。在这种情况下,您有以下两个选项
使用普通Guid类型参数而不是类包装器
在正文中发布复杂类型,而不是通过URI发送
我将尝试使用查询字符串。我希望使用复杂类型而不是简单类型在控制器操作中执行特定于上下文的验证。这样,操作只涉及快乐路径。使用模型查询字符串,但这也不起作用。我可能会将我的操作移动到单独的控制器中,以避免路由冲突。但这是没有意义的。为什么webapi不能区分uri的[GET]Address/和[GET]Address/{guid}?我的另一个选择是将[GET]地址/移动到另一个uri。类似于[GET]地址和[GET]地址/{guid}。我宁愿让他们在一起,但这可能是我唯一的选择。